Rinse and sort 1 lb dried beans; soak overnight or use quick soak (boil 2 minutes, sit 1 hour), then drain.
Heat 2 tbsp oil in a large pot over medium heat; add diced onion, carrots and celery and sauté until softened, about 6–8 minutes.
Stir in 3 cloves minced garlic and cook 30–60 seconds until fragrant.
Add the soaked beans (or drained canned beans), diced potato if using, and the ham hock or diced ham to the pot.
Pour in 6 cups low-sodium broth and add 2 bay leaves, 1 tsp dried thyme and 1/2 tsp smoked paprika.
Bring to a simmer, then reduce heat to low and cover partially; simmer gently for 1–1.5 hours until beans are tender and flavors meld.
If using a ham hock, remove it after cooking, shred the meat with forks and return shredded ham to the soup.
For a creamier texture, mash a cup of beans against the pot and stir to thicken the broth.
Taste and adjust seasoning with salt and pepper; simmer 5–10 more minutes.
Remove bay leaves, garnish with chopped parsley and serve hot with crusty bread.