Melt butter in a large soup pot over medium heat. Add chopped onion and cook until soft and translucent.
Add minced garlic and cook for about 30 seconds until fragrant.
Add diced potatoes and pour in chicken broth until the potatoes are just covered.
Bring to a gentle boil, then reduce heat and simmer for 15–20 minutes until the potatoes are fork-tender.
Lightly mash the potatoes or blend part of the soup to create a creamy texture while keeping some chunks.
Stir in milk or cream and gently heat through without boiling.
Season with salt and black pepper to taste. Adjust thickness with more broth or milk if needed.
Serve warm with desired toppings.