Dice the shallot very finely so it melts into the sauce instead of staying chunky.
Mince the garlic (small pieces cook evenly and won’t burn as easily).
Chunk the cod into even pieces (3–4 cm). Even size = even cooking.
Zest the lemon first, then juice it. Keep both ready—zest perfumes, juice brightens.
Shred cheeses and keep separate: mozzarella for melt, parm for depth.
Pasta: cook just under al dente
Bring a pot of salted water to a rolling boil.
Add ziti and cook 2 minutes less than the package says.
Scoop out 120 g / 4.23 oz pasta water, then drain.
Why: Air-fryer finishing continues cooking. Slightly undercooked pasta prevents mush.
Build the sauce: glossy, layered flavor
Heat olive oil in a wide pan over medium heat.
Add shallot + a pinch of salt and cook 4–6 minutes until soft and translucent.
Add garlic and cook 30–45 seconds (fragrant, not browned).
Stir in tomato paste and cook 1 minute to deepen sweetness and color.
Add crushed tomatoes + chili flakes. Simmer 6–8 minutes, stirring occasionally.
Lower heat. Stir in cream until the sauce turns a warm coral color.
Add lemon zest. Taste. If the tomatoes are sharp, add sugar only if needed.
Cod: gentle cook, then finish in sauce
Season cod with half the salt, pepper, and paprika (optional).
Add cod chunks to the simmering sauce (low heat).
Cover and cook 4–6 minutes until the cod is just opaque and flakes easily.
Turn off heat and add lemon juice.
Combine: correct texture with pasta water
Add drained ziti to the sauce and fold gently.
Add pasta water a little at a time until the sauce coats pasta generously (usually 60–120 g / 2.1–4.23 oz).
Fold in half the parm and a small handful of basil.
Texture target: saucy, glossy, not soupy. It should look slightly looser than final—air fryer will tighten it.