In a large Dutch oven or heavy pot, heat 1/4 cup olive oil over medium heat. Add onion, leek, and fennel; sauté 8–10 minutes until softened and fragrant but not browned. Add garlic and saffron; cook 1 minute more.
Stir in tomatoes; cook 2 minutes. Pour in water (or broth), add the bouquet garni, and season with a few grinds of black pepper. Bring to a lively simmer.
Add potatoes and carrots. Reduce to a gentle simmer, cover, and cook 15–18 minutes, until vegetables are just beginning to turn tender (potatoes should yield to a fork).
Gently nest the fish pieces into the simmering broth (optional: bundle fish in a loosely tied cheesecloth pouch to keep pieces intact).
Add cannellini beans and zucchini. Return to a simmer and cook uncovered 8–12 minutes, until the fish is opaque and flakes easily.
Discard any broken or cracked mussels. Add mussels, cover, and cook 3–5 minutes until all have opened; discard any that remain closed. Turn off the heat.
Remove the bouquet garni. If a cheesecloth pouch was used, lift it out and transfer the fish to a platter; otherwise, use a slotted spoon to transfer fish and vegetables as desired. Stir in lemon juice and the remaining 1/4 cup olive oil. Taste and, only if needed, finish with a small pinch of sea salt.
Ladle broth into bowls, garnish with parsley or dill, and serve immediately with the platter of fish and vegetables for sharing.