Sauté the aromatics. Warm 2 tablespoons olive oil (and 1 tablespoon butter if using) in a large pot over medium heat. Add 1 diced onion and a pinch of salt.
Cook 6–8 minutes until soft and lightly golden. Stir in 3–4 minced garlic cloves and cook 30 seconds until fragrant.
Toast the tomato paste. Add 2 tablespoons tomato paste and cook, stirring, for 1–2 minutes. It should darken slightly; this deepens the flavor.
Build the base. Add the 28-ounce can of whole peeled tomatoes (with juices), 3 cups low-sodium broth, 1 peeled and chopped carrot, 1 bay leaf, a small pinch of red pepper flakes, and the Parmesan rind if using.
Break the tomatoes up with a spoon.
Simmer gently. Bring to a low simmer, then reduce heat to medium-low. Cook uncovered for 20–25 minutes, stirring occasionally. The carrot should be tender and the flavors melded.
Add basil. Stir in 1 packed cup fresh basil leaves (save a few for garnish).
Simmer 2 minutes to soften the leaves without dulling their freshness.
Blend until smooth. Remove the bay leaf (and Parmesan rind). Use an immersion blender to puree the soup right in the pot until silky. For extra-smooth texture, blend in batches in a countertop blender, venting the lid.
Finish and balance. Stir in 1/3 to 1/2 cup heavy cream or coconut milk.
Taste and season with salt and black pepper. If it’s too tangy, add 1/2 to 1 teaspoon sugar or honey. Add a small squeeze of lemon to lift the flavors.
Serve. Ladle into bowls and top with torn basil, cracked pepper, and a drizzle of olive oil.
Add garlic croutons or a grilled cheese on the side if you like.