Sauté the aromatics: Warm 2 tablespoons of olive oil in a large pot over medium heat. Add diced onion, carrots, and celery. Cook 6–8 minutes, stirring occasionally, until softened and lightly golden.
Add garlic and tomato paste: Stir in minced garlic and 2 tablespoons tomato paste.
Cook 1–2 minutes until the tomato paste darkens slightly and smells sweet.
Build the broth: Add crushed tomatoes, vegetable broth, Italian seasoning, bay leaf, a pinch of red pepper flakes, and the Parmesan rind if using. Bring to a gentle boil.
Simmer: Reduce heat to medium-low and simmer 10 minutes to let the flavors meld.
Add the pasta: Stir in your small pasta. Simmer according to package directions, usually 8–10 minutes, stirring now and then so it doesn’t stick.
Stir in beans and greens: Add drained cannellini beans and either diced zucchini (cook 5–6 minutes) or a few handfuls of spinach (cook 1–2 minutes) until tender.
Season and brighten: Remove the bay leaf and Parmesan rind.
Add salt and pepper to taste, then finish with 1–2 teaspoons lemon juice or red wine vinegar to brighten the flavors.
Garnish and serve: Ladle into bowls and top with chopped parsley or basil. Add grated Parmesan or a vegan hard-style cheese if you like. Serve with warm bread.