Start by heating the olive oil in a large soup pot over medium heat. Add the chopped carrots, onions, garlic, celery, and fennel. Cook them for about 8–10 minutes until they begin to soften and release their aromas. Stir frequently so nothing sticks to the bottom of the pot.
Once the vegetables are tender, add the tomato paste and cook for another 2 minutes. This step deepens the flavor of the soup and removes any raw tomato taste. You should notice a rich, fragrant aroma as everything blends together.
Next, stir in the canned tomatoes, beans, bay leaf, salt, and pepper. Let the mixture come to a gentle boil. Reduce the heat and simmer for about 15 minutes so the flavors meld and the vegetables become even softer.
Now it's time to add the pasta and green beans to the pot. Stir them in and let the soup simmer uncovered for another 10–12 minutes, or until the pasta is al dente and the green beans are tender but still bright. Be sure to stir occasionally to prevent the pasta from sticking to the bottom.
Keep an eye on the soup at this stage—small pasta can overcook quickly. If the liquid reduces too much, feel free to add a splash of hot water or vegetable broth to keep the soup brothy and smooth.
Once the pasta and green beans are fully cooked, taste the soup and adjust salt and pepper as needed. Remove the bay leaf before moving on to the final step.
Stir in the chopped leafy greens last. They only need about 2–3 minutes to wilt into the hot soup. Adding them at the end helps preserve their nutrients and gives the soup a fresh green finish.
Ladle the soup into bowls and top with freshly grated Pecorino or Parmesan if desired. For a vegan version, skip the cheese or use a plant-based alternative. This soup is perfect on its own or served with crusty bread.
Enjoy it right away, or store leftovers in the fridge—it tastes even better the next day!