01 - In a large bowl, combine ground meat, breadcrumbs, Parmesan, egg, garlic, parsley, oregano, salt, and pepper. Mix until just combined. Form into small meatballs about 1 inch in diameter and set aside.
02 - Heat 1 tbsp olive oil in a large soup pot over medium heat. Add the meatballs in batches, turning to brown on all sides. They do not need to be cooked through. Transfer browned meatballs to a plate.
03 - In the same pot, add remaining 1 tbsp olive oil. Sauté onion, carrots, and celery for 5 minutes until softened. Add garlic, basil, thyme, and red pepper flakes and cook 1 minute more.
04 - Add crushed tomatoes, broth, and bay leaf. Bring to a simmer. Return meatballs to the pot. Cover and simmer gently for 15 minutes.
05 - Stir in the pasta and continue simmering, uncovered, for 10 minutes or until pasta is al dente and meatballs are cooked through.
06 - Reduce heat to low. Remove the bay leaf. Stir in heavy cream and baby spinach. Cook for 2 to 3 minutes until spinach is wilted and soup is creamy. Season with salt and pepper as needed.
07 - Ladle soup into bowls. Top with grated Parmesan and fresh herbs. Serve with crusty bread if desired.