Sauté the base: Heat oil in a large pot over medium. Add onion, carrots, and celery. Cook 6–8 minutes until softened.
Stir in garlic for 30 seconds.
Add ham and spices: Stir in ham, thyme, smoked paprika, black pepper, and bay leaf. Cook 2 minutes to wake up the flavors.
Pour in broth and beans: Add broth and beans. If using a ham bone or hock, add it now.
Bring to a gentle simmer.
Simmer low and slow: Cover slightly ajar and simmer 25–35 minutes. If adding potatoes, add them now and cook until tender. For greens, stir them in during the last 5 minutes.
Adjust texture: For a creamier soup, mash some beans against the pot or blend 1–2 cups and stir back in.
Finish and season: Remove bay leaf (and ham bone, if used).
Stir in vinegar or lemon juice for brightness. Taste and add salt as needed.
Serve: Ladle into bowls and top with parsley. Great with crusty bread.