Heat the oil in a large skillet over medium heat until shimmering. Add the sliced onion and sauté for about 5-7 minutes, stirring occasionally, until golden and fragrant.
Add the minced garlic and ginger to the skillet. Cook for 1-2 minutes until they sizzle and release a sharp, inviting aroma. Stir constantly to prevent burning.
Sprinkle in the garam masala, turmeric, and chili powder. Toast the spices for about 30 seconds, stirring constantly, until fragrant and slightly darker in color.
Add the chopped tomatoes or tomato paste. Cook for 5-6 minutes, stirring frequently, until the mixture darkens and becomes saucy with a rich aroma filling the kitchen.
Toss in the shrimp and cook for 2-3 minutes per side, until they turn pink, opaque, and slightly firm. Be careful not to overcook to keep them tender.
Pour in the coconut milk and stir well. Lower the heat and let the curry simmer gently for 5-8 minutes, allowing the flavors to meld and the sauce to thicken slightly.
Taste the sauce and adjust salt or spice levels as needed. If the sauce is too thick, add a splash of water; if too thin, simmer a bit longer until it thickens.
Remove from heat and stir in chopped cilantro. Let sit for 2 minutes to allow flavors to settle and brighten the dish.
Serve hot with steamed rice or warm naan bread, garnished with additional cilantro if desired.