Sauté the aromatics: Heat olive oil or butter in a large pot over medium heat. Add the chopped onion and a pinch of salt.
Cook, stirring occasionally, until soft and translucent, about 6–8 minutes.
Add garlic and tomato paste: Stir in the minced garlic and cook for 30 seconds, just until fragrant. Add the tomato paste and cook for 1–2 minutes to caramelize it slightly. This deepens the flavor.
Add tomatoes and broth: Pour in the canned tomatoes with their juices and the broth.
If using whole tomatoes, crush them lightly with a spoon. Add sugar (if using), salt, black pepper, and red pepper flakes.
Simmer: Bring to a gentle boil, then reduce to a simmer. Cook uncovered for 20–25 minutes, stirring occasionally.
The soup should thicken slightly and the flavors will meld.
Add basil and blend: Stir in the fresh basil leaves and balsamic vinegar or lemon juice. Use an immersion blender to blend the soup until smooth. For a chunkier texture, pulse lightly or blend only half.
Make it creamy (optional): Stir in the heavy cream or half-and-half.
Simmer for 2–3 more minutes. Taste and adjust seasoning with more salt, pepper, or acid.
Serve: Ladle into bowls and garnish with extra basil and a sprinkle of Parmesan. Add a drizzle of olive oil if you like.
Serve with crusty bread or a grilled cheese sandwich.