Start with the sauce – In a medium saucepan, melt the butter over medium heat. Once melted, whisk in the flour and stir constantly for about 1-2 minutes until smooth and slightly golden.
Slowly pour in the chicken broth a little at a time, whisking continuously to keep it lump-free. When fully combined, add in the milk and continue to whisk until the sauce thickens to a smooth, pourable consistency.
Stir in the garlic powder, onion powder, salt, and pepper. Once everything is well combined, take the sauce off the heat and set it aside.
Make the meat filling – In a large skillet, heat the olive oil. Sauté the chopped onion and garlic until they soften and become fragrant, about 3-4 minutes.
Add the ground beef and cook for 8-10 minutes, breaking it apart with your spoon. Once fully browned, stir in the Italian herbs and adjust seasoning as needed.
Preheat your oven to 350°F (175°C) and lightly grease a 9x13-inch baking dish.
Time to assemble! Layer one-third of the sliced potatoes in the bottom of the dish. Spoon over one-third of the creamy sauce and then one-third of the beef mixture. Repeat the layers twice more, ending with the sauce and beef.
Sprinkle the shredded cheddar evenly over the top. Cover the dish tightly with aluminum foil and bake for 50 minutes.
Remove the foil and bake for another 20 minutes. For an extra-crispy cheese topping, broil for the last 2-3 minutes.
Let the casserole rest for at least 15 minutes before serving—this helps everything set and makes it easier to slice.
Finish with a sprinkle of fresh parsley for a touch of color and freshness.