Warm the pot: Set a large pot or Dutch oven over medium heat.
Add a drizzle of olive oil and the butter. When the butter melts and foams, you’re ready.
Sauté the aromatics: Add the chopped onion with a pinch of salt. Cook 4–5 minutes until translucent.
Stir in the garlic and cook 30 seconds, just until fragrant.
Toast the tomato paste: Add 2–3 tablespoons of tomato paste. Stir and cook for 2 minutes to deepen the flavor and remove raw acidity.
Build the base: Pour in the crushed tomatoes and 3–4 cups of broth. Add the Parmesan rind if using, a pinch of red pepper flakes, and a few grinds of black pepper.
Stir and bring to a gentle simmer.
Simmer for flavor: Let it bubble softly for 10–12 minutes. Taste and adjust salt. If it’s too thick, add a splash more broth.
Blend (optional): For a smoother soup, use an immersion blender right in the pot.
Leave it chunky if you prefer rustic texture.
Add the cream: Lower the heat and stir in 1/2 to 3/4 cup cream or half-and-half. Warm gently—don’t boil—so the dairy stays silky.
Cook the gnocchi: Add the gnocchi directly to the soup. Simmer 2–3 minutes, or until they float and are tender.
Finish with greens and basil: Stir in baby spinach until wilted, about 30 seconds.
Add chopped basil and taste again for seasoning. A squeeze of lemon can brighten it right up.
Serve and garnish: Ladle into bowls and top with grated Parmesan, a drizzle of olive oil, and extra basil. Add more red pepper flakes if you like heat.