Chop tofu or paneer into 1 inch/2.5 cm chunks.
If using tofu: fry the cubes (in batches if needed) in a large skillet in the onion oil and sprinkling of salt. Toss frequently until brown on all sides, for ~10 minutes. Sprinkle with turmeric, fully coat then set on some paper towels to cool and crisp.
Mix the yoghurt, garlic oil, spices and ginger together in a bowl. Stir in the cooked tofu or paneer cubes, coat with the spice mix and set aside to marinade.
Chop sweet potatoes into inch chunks and carrots into cm rounds.
Heat garlic oil in large casserole, then add the veg and cook for ~5 minutes
Add tomatoes and coconut milk to the veg in the large casserole, stir well and break the tomatoes up a bit if whole.
Boil the tomatoes, coconut milk and vegetables on medium heat (stirring occasionally to prevent sticking) until reduced and veg soft (~15-20 mins). Then take off the heat and leave to cool a bit.
If cooking, boil the rice according to packet instructions.
If using paneer cheese: Fry up the marinated paneer on medium-high heat in single layer batches until browned.
Take a soup blender and blend around half the veg, coconut, tomato mixture until thickened to your preferred consistency but still a bit chunky if you like the extra texture.
Add the tofu/paneer and left over marinade to the sauce and stir well to combine. Heat on low heat for a while longer (~5 mins) to combine flavours. Season to taste with salt, pepper, maple syrup and additional spice.
Heat any additional sides (veg, bread) if using. Serve hot with all the trimmings. This is great for leftovers and freezing.