Sauté Aromatics: Heat olive oil in a large pot over medium heat. Add the diced onion, carrots, and celery along with ¼ teaspoon salt and a few grinds of black pepper. Cook, stirring occasionally, until the vegetables soften and the onion turns translucent, about 5 minutes.
Build Flavor Base: Stir in tomato paste, minced garlic, red pepper flakes, rosemary (or thyme), and dried basil. Continue cooking for about 1 minute until the mixture becomes fragrant and the tomato paste darkens slightly.
Add Broth and Beans: Pour in the vegetable broth, then add the drained white beans and canned diced tomatoes. Sprinkle in the remaining ½ teaspoon salt and ½ teaspoon pepper. Use a wooden spoon to scrape any browned bits off the bottom of the pot, incorporating those rich flavors.
Simmer the Soup: Bring everything to a gentle simmer. Lower the heat, cover, and let cook for 15 minutes, allowing the vegetables to soften fully and the flavors to meld.
Blend Partially for Creaminess (Optional): If you prefer a creamier texture, use an immersion blender to purée about half the soup, mainly blending the beans while leaving chunks of vegetables intact. This step is optional and can be skipped if you like a chunkier soup.
Add Greens and Finish: Return the pot to low heat. Stir in the chopped kale, turn off the heat, and cover the pot. Let the greens wilt gently for 5 minutes. Then uncover, add the balsamic vinegar and coconut milk (or cashew cream), stirring well to combine.
Adjust Seasoning and Serve: Taste the soup and adjust seasoning as needed—add more salt, red pepper flakes for heat, tomato paste for depth, or coconut milk for extra creaminess. Serve hot, garnished with optional vegan parmesan, fresh basil, or crunchy croutons.