Preheat and prep: Heat your oven to 375°F (190°C).
Grease a 9x13-inch baking dish. Wash and thinly slice the potatoes (about 1/8-inch thick). A mandoline makes this easy, but a sharp knife works.
Brown the beef: In a large skillet over medium-high heat, warm a splash of oil.
Add the ground beef and cook, breaking it up, until browned with little pink left. Spoon off excess fat if needed.
Add aromatics: Stir in the diced onion and cook until soft, about 3–4 minutes. Add the garlic and cook 30 seconds more until fragrant.
Season the meat: Mix in salt, pepper, thyme, paprika, Worcestershire sauce, and tomato paste if using.
Cook 1–2 minutes to blend the flavors.
Make the sauce: Push the meat to one side of the pan. Melt the butter in the empty space, sprinkle in the flour, and stir to form a paste. Slowly whisk in the beef broth, then the cream.
Stir everything together and simmer for 2–3 minutes until slightly thickened. Taste and adjust salt and pepper.
Layer the potatoes: Arrange half the potato slices in the prepared dish, slightly overlapping. Sprinkle with a pinch of salt and pepper.
Add the beef mixture: Spoon half of the beef and sauce over the potatoes.
Sprinkle a small handful of cheese.
Repeat layers: Add the remaining potatoes, another light seasoning of salt and pepper, then the rest of the beef mixture. Top with the remaining cheese.
Cover and bake: Cover tightly with foil and bake for 40 minutes. This helps the potatoes cook through without drying out.
Uncover and finish: Remove the foil and bake another 15–20 minutes until the top is golden and the potatoes are tender when pierced with a knife.
If you want more color, broil for 2–3 minutes at the end.
Rest and serve: Let the casserole rest for 10 minutes before cutting. The sauce sets slightly, making cleaner slices. Garnish with chopped parsley if you like.