Prep the zucchini: Slice zucchini lengthwise using a mandoline or a sharp knife. Lay slices on a sheet pan, sprinkle with salt, and let sit 15–20 minutes to draw out moisture.
Pat dry with paper towels.
Par-cook the zucchini: Brush slices lightly with olive oil and arrange on two lined sheet pans. Bake at 400°F (200°C) for 10–12 minutes, flipping halfway, until just tender. This step keeps your lasagna from getting watery.
Make the meat sauce: Heat 1 tablespoon olive oil in a large skillet over medium heat.
Add onion and cook 3–4 minutes until softened. Stir in garlic for 30 seconds.
Brown the meat: Add ground beef (and sausage if using). Cook, breaking it up, until browned with no pink remaining.
Drain excess fat if needed.
Season and simmer: Stir in crushed tomatoes, tomato paste, Italian seasoning, red pepper flakes, salt, and pepper. Simmer uncovered 10–15 minutes to thicken. Taste and adjust seasoning.
Mix the ricotta layer: In a bowl, combine ricotta, egg, chopped parsley or basil, a pinch of salt, and black pepper.
Stir until smooth.
Assemble the lasagna: Lower oven to 375°F (190°C). Spread a thin layer of meat sauce in a 9x13-inch baking dish. Add a layer of zucchini slices, slightly overlapping.
Dollop and spread half the ricotta mixture over the zucchini. Sprinkle with one-third of the mozzarella and some Parmesan. Repeat layers: sauce, zucchini, ricotta, and cheeses.
Top and bake: Finish with a final layer of zucchini, the remaining meat sauce, and the rest of the mozzarella and Parmesan.
Cover loosely with foil (tent it so cheese doesn’t stick) and bake 20 minutes.
Uncover to brown: Remove foil and bake another 10–15 minutes until the cheese is bubbly and golden at the edges.
Rest before slicing: Let the lasagna sit 10–15 minutes. This helps it set so slices hold together.
Garnish and serve: Sprinkle with fresh basil or parsley. Cut into squares and serve warm.