Heat olive oil in a large pot or Dutch oven over medium heat. Add the onion, carrots, and celery, cooking until softened, about 8-10 minutes. Season with a pinch of salt.
Stir in the garlic, rosemary, oregano, and red pepper flakes (if using). Cook for 1-2 minutes until wonderfully fragrant.
Add the cannellini beans, crushed tomatoes, and vegetable broth. Toss in the parmesan rind if you have one—it adds amazing depth! Bring to a boil, then reduce heat and simmer for 20 minutes.
Using a potato masher or the back of a wooden spoon, gently mash about a third of the beans against the side of the pot. This creates a creamy, thick texture while keeping lots of whole beans.
Stir in the chopped kale or Swiss chard and cook for 5-7 minutes until wilted and tender.
Remove from heat and stir in the lemon juice. Remove the parmesan rind. Season with salt and pepper to taste.
Serve in bowls topped with grated Parmesan cheese, fresh basil, and a drizzle of good olive oil. Don't forget crusty bread for dipping!