Sauté the aromatics: Warm the olive oil or butter in a large pot over medium heat. Add the onion and a pinch of salt.
Cook, stirring occasionally, until soft and translucent, about 5 to 7 minutes. Stir in the garlic and cook for 30 seconds, just until fragrant.
Build the base: Add the tomato paste and cook, stirring, for 1 to 2 minutes. This step caramelizes the paste slightly and deepens the flavor.
Add tomatoes and broth: Pour in the canned tomatoes with their juices and the broth.
If using whole peeled tomatoes, crush them gently with a spoon. Add sugar (if using), salt, pepper, and red pepper flakes. If you have a Parmesan rind, drop it in now.
Simmer: Bring the soup to a gentle boil, then reduce heat to low and simmer uncovered for 15 to 20 minutes.
The flavors will meld and the soup will thicken slightly.
Blend: Remove the Parmesan rind if you used it. Add the basil leaves. Using an immersion blender, blend the soup until smooth and silky.
If using a countertop blender, work in batches, venting the lid and covering with a towel to avoid steam buildup, then return the soup to the pot.
Finish with cream: Stir in the heavy cream. Taste and adjust seasoning with more salt or pepper as needed. If the soup is too thick, thin with a splash of broth.
If it tastes too acidic, add another pinch of sugar or a small pat of butter.
Serve: Ladle into bowls and garnish with torn basil, a drizzle of cream or olive oil, and croutons if you like. Pair with grilled cheese for the classic combo.