Heat the olive oil and butter in a large saucepan over medium heat.
Add the onion with a pinch of salt and cook for 8–10 minutes until softened and lightly golden.
Stir in the garlic, ground coriander, and toasted crushed coriander seeds. Cook for 30 seconds until fragrant.
Add the carrots, potato, stock, and bay leaf. Bring to a boil, then reduce to a gentle simmer.
Partially cover and cook for 18–22 minutes, or until the carrots and potato are completely tender.
Remove the bay leaf and allow the soup to cool for 5 minutes.
Blend using a stick blender or food processor until silky smooth and velvety. Add a splash of stock or water if needed to adjust consistency.
Return the soup to low heat. Stir in the milk or cream, orange juice, lemon juice, and fresh coriander.
Season with salt and black pepper to taste.
Warm through gently without boiling.
Ladle into bowls and garnish with extra coriander, a swirl of cream or yogurt, and cracked black pepper.
Serve hot with crusty bread or rolls.