Sauté the aromatics: Heat olive oil in a large pot over medium heat. Add onion, carrot, and celery with a pinch of salt.
Cook 5–6 minutes until softened, stirring occasionally.
Add garlic and spices: Stir in the garlic, Italian seasoning, and red pepper flakes. Cook 30–60 seconds until fragrant.
Build the base: Add tomato paste and cook 1–2 minutes, stirring, until it darkens slightly. This step deepens the tomato flavor.
Add tomatoes and broth: Pour in crushed tomatoes and broth.
Add the bay leaf and sugar if using. Bring to a gentle boil.
Simmer: Reduce heat and simmer 10 minutes to let the flavors meld. Taste and season with salt and pepper.
Add pasta or rice: Stir in the pasta (or rice) and simmer until tender, about 8–10 minutes for small pasta, 12–15 for rice.
Stir occasionally to prevent sticking.
Stir in spinach: Remove the bay leaf. Add the spinach in batches, stirring until just wilted, about 1–2 minutes.
Finish the soup: Off the heat, add vinegar or lemon juice to brighten. Swirl in cream if using.
Adjust salt and pepper.
Serve: Ladle into bowls and top with Parmesan and fresh herbs if you like. Serve with crusty bread or a grilled cheese.