Prepare Beans (if using dried): Rinse navy beans and soak them overnight or use the quick-soak method. Drain before cooking.
Sauté Aromatics: In a large pot, heat olive oil over medium heat. Add onion, garlic, carrots, and celery. Sauté for 5–6 minutes until softened.
Add Ham and Spices: Stir in diced ham, thyme, bay leaves, black pepper, and smoked paprika. Cook for 2 minutes to release flavors.
Add Beans and Broth: Add soaked or canned beans and chicken or vegetable broth. Bring to a boil, then reduce heat to simmer. Cover and cook for 1 hour (if using dried beans) or 20–25 minutes (if using canned) until beans are tender.
Add Greens (Optional): Stir in chopped kale or spinach in the last 5 minutes of cooking.
Season and Finish: Remove bay leaves. Taste and adjust seasoning with salt and pepper.
Serve: Ladle hot soup into bowls and serve with crusty bread or rolls.