Warm the pot: Heat olive oil in a large soup pot over medium heat. When it shimmers, add onion, carrots, and celery.
Cook, stirring often, until softened and lightly golden, about 7–9 minutes.
Add aromatics: Stir in garlic, rosemary, thyme, and red pepper flakes if using. Cook 1 minute until fragrant, stirring so the garlic doesn’t brown.
Tomato base: Add tomato paste and cook for 1–2 minutes to caramelize it slightly. This deepens the flavor.
Deglaze and simmer: Add diced tomatoes and vegetable broth.
Scrape any browned bits from the bottom of the pot for extra flavor.
Beans and bay: Stir in cannellini beans, bay leaf, and Parmesan rind or miso if using. Bring to a gentle boil, then reduce to a simmer for 15–20 minutes.
Thicken naturally: For a creamier texture, use the back of a spoon or a potato masher to mash some of the beans against the side of the pot. Alternatively, blend 1 cup of soup and return it to the pot.
Greens go in: Stir in kale or spinach and simmer 3–5 minutes until wilted and tender.
Finish and season: Remove bay leaf and Parmesan rind if used.
Stir in lemon juice or vinegar. Taste and season with salt and black pepper. Add a drizzle of olive oil for richness.
Serve: Ladle into bowls and top with chopped parsley if you like.
Serve with warm, crusty bread.