Build the base: Warm the olive oil in a large pot over medium heat. Add onion, carrots, and celery with a pinch of salt. Cook 6–8 minutes, stirring, until softened and lightly golden.
Add aromatics: Stir in garlic, tomato paste, oregano, basil, thyme, and bay leaf.
Cook 1–2 minutes until the tomato paste darkens slightly and smells sweet.
Simmer the broth: Add diced tomatoes and vegetable broth. Bring to a boil, then reduce to a gentle simmer. Cook 10 minutes to meld flavors.
Add firm vegetables: Stir in zucchini and green beans.
Simmer another 8–10 minutes until just tender.
Beans and pasta: Add cannellini beans, kidney beans, and pasta. Simmer 7–10 minutes, stirring often, until the pasta is al dente. Add a splash of water if the soup gets too thick.
Finish with greens: Stir in kale or spinach and cook 1–2 minutes until wilted and bright green.
Remove the bay leaf.
Season and brighten: Add red wine vinegar or lemon juice. Taste and season with salt, black pepper, and red pepper flakes if using.
Serve: Ladle into bowls and garnish with parsley or basil and a small drizzle of olive oil if you like.