Prep the ingredients: Dice the onion, mince the garlic, grate the ginger, and chop all vegetables into bite-size pieces.
If using chicken, cut it into small chunks. Press and cube tofu if using.
Sauté the aromatics: Warm 1–2 tablespoons oil in a large pot over medium heat. Add onion with a pinch of salt and cook until soft, about 5 minutes.
Stir in garlic and ginger for 30 seconds until fragrant.
Bloom the curry: Add curry paste (or powder) and tomato paste. Cook for 1–2 minutes, stirring, until glossy and aromatic. This step deepens the flavor.
Add the hearty veggies: Stir in carrots, cauliflower, and bell pepper.
Cook 3–4 minutes to start softening.
Pour in liquids: Add broth and coconut milk. Stir to combine, scraping up any bits from the bottom of the pot.
Add protein: If using chicken, add it now and simmer 12–15 minutes until cooked through. If using tofu, add now and simmer gently so it holds shape.
If using shrimp, wait to add until later so it doesn’t overcook.
Season and simmer: Add fish sauce or soy sauce and sugar. Simmer 10–15 minutes, uncovered, until vegetables are tender and the broth tastes rich. If using shrimp, add in the last 3–4 minutes.
Finish with greens: Stir in green beans (or peas) and spinach.
Cook 2–3 minutes until crisp-tender and wilted.
Adjust to taste: Add lime juice to brighten. Taste and adjust salt, more curry paste for heat, or a splash more coconut milk to mellow spice.
Serve: Ladle into bowls. Top with fresh cilantro or Thai basil, chili flakes if you like heat, and extra lime wedges.
Serve plain, over rice, or with rice noodles.