Peel and chop the carrots into chunky 1-inch pieces, then do the same with the potatoes—aim for uniform pieces so they cook evenly.
Heat the oil in a large heavy-bottomed pot over medium heat until it shimmers, then add the chopped onion. Sauté for 5-7 minutes, stirring occasionally, until the onion turns golden and fragrant.
Add the minced garlic and grated ginger to the onions, cooking for about 1 minute until their aroma fills the air and they turn fragrant.
In a small dry skillet, toast the cumin and coriander seeds over medium heat for about 30 seconds until fragrant, then grind them using a mortar and pestle or spice grinder. Add the toasted spices to the pot.
Stir in the turmeric and garam masala, cooking for another 30 seconds to toast the spices and deepen their aroma.
Add the chopped carrots and potatoes to the pot, stirring well to coat them in the fragrant spice mixture. Cook for 2-3 minutes, allowing the vegetables to absorb the flavors.
Pour in the coconut milk and water or broth, stirring gently. Bring the mixture to a gentle simmer over medium-low heat, then cover loosely with a lid.
Reduce the heat to low and let the curry simmer gently for 20-25 minutes, stirring occasionally until the vegetables are tender and the sauce has thickened slightly.
Uncover and cook for an additional 5 minutes to allow the curry to thicken further, stirring as needed. Taste and add salt to enhance the flavor.
Remove from heat, let sit for a few minutes to meld the flavors, then serve hot, garnished with herbs if desired, alongside rice or crusty bread.