Peel and dice the potatoes into 1-inch chunks, then place them in boiling salted water and cook for about 15 minutes until tender. Drain and set aside.
Heat oil in a large heavy-bottomed pan over medium heat. Add cumin seeds and toast for about 30 seconds until fragrant and slightly darkened.
Add the chopped onion to the pan and sauté for 5-7 minutes, stirring occasionally, until golden and sweet-smelling.
Stir in the minced garlic and grated ginger, cooking for another 30 seconds until aromatic, being careful not to burn the garlic.
Add turmeric, chili powder, and garam masala to the pan. Toast the spices for about 20 seconds until fragrant, stirring constantly.
Mix in the chopped tomatoes and cook for 8-10 minutes, stirring occasionally, until the mixture thickens and the oil begins to shimmer on the surface.
Add the cooked potatoes and chopped spinach to the pan. Stir well to combine, allowing the spinach to wilt and turn bright green.
Cover the pan and simmer on low heat for about 10 minutes, gently stirring halfway through, until the flavors meld and the spinach is tender.
Uncover and cook for a few more minutes if needed to thicken the sauce. Taste and adjust salt as desired.
Remove from heat, let the curry sit for 5 minutes to allow flavors to deepen, then serve hot with rice or flatbread, garnished with fresh herbs if desired.