Heat olive oil in a large, deep skillet over medium-high heat. Add the diced onion and cook until softened, about 3 minutes. Add the minced garlic and cook for 30 seconds until fragrant.
Add the ground beef to the skillet. Cook until browned, breaking it into crumbles with a wooden spoon, about 5-6 minutes. Drain any excess fat if needed.
Stir in the Italian seasoning, salt, pepper, and red pepper flakes. Let the spices bloom for about 30 seconds.
Pour in the diced tomatoes with their juices and the beef broth. Stir to combine and bring to a boil.
Add the uncooked pasta shells and stir well. Reduce heat to medium-low, cover, and simmer for 12-15 minutes, stirring occasionally, until the pasta is al dente and the liquid has thickened.
Remove from heat and stir in the fresh baby spinach. The residual heat will wilt the spinach in about 1-2 minutes. Season to taste and serve topped with freshly grated parmesan.
Notes
Store leftovers in an airtight container in the refrigerator for up to 3-4 days. Reheat on the stovetop with a splash of broth. You can swap the pasta shells for penne or rotini. For extra veggies, add diced bell peppers or zucchini with the onion.