Sauté the aromatics: In a large pot or Dutch oven, melt the butter over medium heat. Add the onion and celery. Cook, stirring occasionally, until softened and translucent, about 5–7 minutes. Stir in the garlic and cook for 30 seconds, until fragrant.
2 tbsp unsalted butter, 1 medium yellow onion, diced, 2 celery stalks, diced, 2 cloves garlic, minced
Add potatoes and broth: Add the diced potatoes, broth, thyme, and bay leaf. Bring to a gentle boil, then reduce to a simmer. Cover and cook until the potatoes are very tender, 15–20 minutes.
2 pounds potatoes, peeled and diced into 1/2-inch cubes, 4 cups low-sodium chicken or vegetable broth, 1/2 tsp dried thyme or 1 teaspoon fresh thyme leaves (optional), 1 bay leaf (optional)
Blend to your preferred texture: Remove the bay leaf. Use an immersion blender to partially blend the soup, leaving some chunks for texture. If you don’t have an immersion blender, transfer about half the soup to a blender, blend until smooth, and return it to the pot.
Make it creamy: Stir in the milk. Add the cream cheese pieces, stirring until fully melted and smooth. Keep the heat on low to avoid scorching. If it seems too thick, add a splash more broth or milk.
1 cup milk, 8 ounces cream cheese, softened and cut into chunks
Season and finish: Add salt and pepper.
Taste and adjust seasoning. Ladle into bowls and top with chives and any optional toppings you like.
1 tsp kosher salt, plus more to taste, 1/2 tsp black pepper, 2 tbsp chopped fresh chives or green onions, for garnish, Optional toppings: shredded cheddar, crumbled bacon, sour cream, extra chives, hot sauce