Peel the onions and thinly slice them. Trim the root and leaves off the cauliflower, and slice the cauli into florets. Thinly slice the stalk. Scrub the potatoes and chop them into small, bite-sized chunks. Roughly chop the tomatoes. Set aside.
Make the curry paste. Separate the coriander leaves and stalks (save the leaves for later). Add the stalks to a food processor. Peel and chop the garlic and ginger, and add to the processor with the chilli, ground cumin, garam masala and turmeric. Add a good pinch of salt and pepper and 1 tbsp oil. Whizz into a paste. No food processor? Chop everything as finely as you can, grating the garlic and ginger, then stir it all together.
Pour 1 tbsp oil into a large pan and set it over a medium-high heat. Add the cauliflower to the pan and cook for 5 mins, stirring occasionally, till the cauliflower is starting to brown. Scoop the cauliflower from the pan and set aside on a plate.
Pour another 1 tbsp oil into the pan and slide in the onions. Fry for 5 mins, till softened. Stir in the curry paste and continue to cook for 3-4 mins. Add the potatoes to the pan and mix well with a wooden spoon. Cook for 10 mins, stirring often.
Add the cauliflower back into the pan with the chopped tomatoes and swirl in 300ml boiling water. Bring to a simmer, then cover the pan and cook for a further 20 mins, till the potatoes are tender and the sauce has thickened a little.
Tip the spinach into the pan and stir well, till the leaves have wilted slightly. Have a taste and add more salt and pepper if you think it needs it. Pile onto plates and serve with a scattering of the coriander leaves.