Sauté the base: Warm olive oil in a large pot over medium heat.
Add onion and carrot with a pinch of salt. Cook 5–6 minutes until softened. Stir in garlic for 30 seconds.
Add veggies and broth: Add broccoli stems, potato or cauliflower, and broth.
Bring to a boil, then reduce to a simmer. Cook 10–12 minutes, until the potato/cauliflower is very tender.
Steam florets: Add broccoli florets to the pot. Simmer 5–6 minutes more, just until bright green and tender.
Avoid overcooking.
Blend for creaminess: Use an immersion blender to partially puree the soup, leaving some chunks. Or transfer half to a blender, puree carefully, and return to the pot.
Add milk and seasonings: Stir in milk, Dijon, and smoked paprika or nutmeg if using. Warm gently over low heat.
Do not boil.
Melt in the cheese: Remove from heat. Gradually whisk in cheddar by small handfuls until smooth. Taste and season with salt and pepper.
Add a squeeze of lemon if you like a brighter finish.
Serve: Ladle into bowls. Top with a sprinkle of extra cheddar, black pepper, or red pepper flakes for heat.