If using fresh tomatoes, blanch in boiling water for 30–60 seconds until skins split, then transfer to ice water and peel. Quarter the tomatoes and remove seeds if desired. If using canned tomatoes, drain and reserve the liquid.
Heat olive oil in a Dutch oven over medium heat. Add the chopped onion and cook for 5–7 minutes until softened and translucent, then add the minced garlic and stir for 1 minute until fragrant.
Stir in the tomato paste and cook for 2–3 minutes, stirring frequently, until it darkens slightly and becomes fragrant — this step is key for depth of flavor.
Add the prepared tomatoes to the pot, breaking them up slightly with a wooden spoon, and cook for 3–4 minutes until they release their juices. Season with salt, black pepper, and red pepper flakes if using.
Pour in the broth (and any reserved canned tomato liquid), bring to a boil, then reduce heat and simmer uncovered for 20–25 minutes until the tomatoes have fully broken down and the liquid has reduced slightly.
Tear the basil leaves into the soup and stir to combine, then simmer for 2 more minutes to infuse the flavor.
Remove the pot from heat, let cool 5 minutes, then blend with an immersion blender until completely smooth (or carefully blend in batches in a countertop blender). For ultra-smooth soup, strain through a fine-mesh strainer.
Return the soup to low heat and stir in the heavy cream, butter, and sugar until the butter is fully melted and the soup turns a beautiful coral-pink color.
Taste and adjust — add more salt if flat, more sugar if too acidic, or more cream if you want it richer. The flavors will deepen as the soup sits.
Ladle the hot soup into bowls and garnish with a cream swirl, fresh basil leaves, grated Parmesan, and/or croutons. Serve immediately with grilled cheese or crusty bread.