2cupsshredded mozzarella cheese, *plus more for topping
Preheat oven to 375°.
Cook the shells in boiling salted water for 9 minutes, they should be slightly undercooked. Arrange them in a single layer on a baking pan lined with parchment paper. You will only need about 25 or so shells, but cook extra in case some of them break.
Make the meat sauce:
While the shells cook, start preparing the meat sauce. Heat the olive oil in a large saute pan. Add the chopped onions and ground beef and season with salt and pepper. Break up the beef and cook until no longer pink.
Add the minced garlic and sauté for 1 more minute.
Stir in the tomato sauce, tomato paste, balsamic vinegar, brown sugar, and dry red wine. Bring to a boil, stirring occasionally, and then reduce to a simmer over low heat.
Make the cheese mixture:
In a medium bowl stir together ricotta, mozzarella, eggs, and pepper.
Assemble the pasta:
Spray a 9 x 13" casserole dish with non-stick spray. Spread half of the meat sauce evenly in the bottom of the dish.
Arrange the shells in an even layer on top of the meat sauce.
To stuff the shells with the cheese mixture you can either use a spoon to gently fill each shell or - add the cheese mixture into a large plastic bag and cut a small opening to pipe the filling in that way.
Spread the rest of the meat sauce over the tops of the shells.
Bake in the preheated oven for 20 minutes. Remove from the oven and spread the top with more shredded mozzarella. Bake for another 10 minutes.
Top with chopped fresh basil if desired and serve warm.
Keep leftovers covered in the fridge or in tupperware for up to 1 week. To reheat a small portion: microwave for 2-3 minutes.To reheat the entire casserole dish: cover with aluminum foil and bake at 350° for 25-30 minutes.