Boil the potatoes. Add chopped potatoes to salted cold water.
Bring to a boil and cook until fork-tender, 12–15 minutes. Drain well.
Mash the potatoes. Return potatoes to the pot. Add butter and milk a little at a time.
Mash until smooth and fluffy. Season with salt and pepper. Set aside.
Sauté the ratatouille vegetables. Warm olive oil in a skillet over medium heat.
Add onion and bell pepper; cook 4 minutes. Stir in eggplant and zucchini; cook until softened and lightly browned, 6–8 minutes.
Add tomatoes and herbs. Stir in garlic, crushed tomatoes, oregano, thyme, and red pepper flakes. Simmer 5–7 minutes until thickened.
Season to taste. Remove from heat.
Cook the protein layer. In the same or a separate skillet, brown the ground meat or plant-based mince over medium-high heat. Break it up as it cooks.
Drain excess fat if needed.
Flavor the filling. Add tomato paste, smoked paprika, broth, and a pinch of salt and pepper. Simmer 3–4 minutes until slightly saucy but not watery.
Assemble in an air fryer-safe dish. Use a small casserole or cake pan that fits your air fryer basket (about 7–8 inches). Lightly grease it.
Layer protein on the bottom, ratatouille in the middle, and mashed potatoes on top.
Finish the topping. Smooth the potatoes with a spatula. Use a fork to create ridges for extra crisping. Sprinkle Parmesan or nutritional yeast if using.
Lightly mist with olive oil spray.
Air fry. Preheat the air fryer to 375°F (190°C). Air fry for 12–18 minutes until the top is golden and edges bubble. If browning too quickly, cover loosely with foil and continue.
Rest and serve. Let it sit for 5–10 minutes to set.
Garnish with fresh basil or parsley and serve warm.