Ingredients:
- For the Meatballs:
- 1 lb (450 g) ground beef (80/20) OR 1/2 lb (225 g) ground beef + 1/2 lb (225 g) ground pork
- 1/2 cup (60 g) plain breadcrumbs (or panko, lightly pulsed)
- 1/4 cup (25 g) finely grated Parmesan cheese
- 1 large egg (50 g)
- 2 cloves garlic, minced (about 6 g)
- 2 tbsp fresh parsley, finely chopped (8 g)
- 1 tsp fine sea salt (5 g)
- 1/2 tsp freshly ground black pepper
- 1/2 tsp dried oregano
- 1/4 tsp crushed red pepper flakes (optional)
- 1–2 tbsp olive oil (for browning)
- For the Soup:
- 1 tbsp olive oil
- 1 medium yellow onion, finely diced (about 1 cup / 150 g)
- 2 medium carrots, diced (about 1 cup / 120 g)
- 2 celery stalks, diced (about 3/4 cup / 100 g)
- 3 cloves garlic, minced
- 6 cups (1.5 L) low-sodium chicken broth or beef broth (or vegetable broth)
- 1 can (14 oz / 400 g) crushed tomatoes OR 1 cup (240 ml) tomato passata + 1/2 cup (120 ml) water
- 1 bay leaf
- 1 tsp dried basil (or 1 tbsp fresh, chopped)
- 1 tsp dried oregano
- Salt and freshly ground black pepper, to taste
- 8 oz (225 g) spaghetti, broken into 2–3 inch (5–7 cm) pieces
- 2 cups (60 g) baby spinach or 3 cups (90 g) chopped kale (stems removed)
- 2 tbsp fresh parsley, chopped (for finishing)
- 2 tbsp freshly grated Parmesan (for serving)
- 1 tbsp lemon juice (optional, to brighten)
Instructions:
- Combine meatball mixture: In a mixing bowl, add ground meat(s), breadcrumbs, Parmesan, egg, minced garlic, parsley, salt, pepper, oregano, and red pepper flakes if using. Mix gently with fingertips until just combined; avoid overworking. Form into small 1-inch (25 mm) meatballs (yield about 24–28). Optional: chill 10–15 minutes to help them hold shape.
- Brown or bake the meatballs: Pan method — heat 1–2 tbsp olive oil in a Dutch oven over medium-high and add meatballs in batches, searing until golden on all sides (about 5–6 minutes); they need not be fully cooked through. Oven method — arrange on a lightly oiled baking sheet and bake at 425°F (220°C) for 10–12 minutes until lightly browned. Remove browned meatballs and set aside.
- Build the soup base: In the same pot, add 1 tbsp olive oil if needed. Sauté onion, carrots, and celery over medium heat until softened and translucent, about 5–7 minutes. Add minced garlic and cook 30–60 seconds until fragrant. Stir in crushed tomatoes (or passata + water), dried herbs, bay leaf, and broth, scraping browned bits from the bottom of the pot.
- Simmer meatballs in the broth: Return the browned meatballs to the pot and bring to a gentle simmer. Simmer uncovered for 12–15 minutes until meatballs are cooked through (internal temp about 160°F / 71°C for beef/pork) and flavors meld.
- Cook the spaghetti in the soup: Add broken spaghetti pieces to the simmering soup and stir to prevent sticking. Cook until al dente, typically 6–9 minutes (follow package time but reduce by 1–2 minutes as pasta will finish in hot broth). If using long strands, add whole and press to submerge so they soften and bend into the broth.
- Finish and serve: Stir in spinach or kale until wilted (1–2 minutes). Remove bay leaf. Taste and adjust salt, pepper, and add lemon juice if using. Ladle into bowls and garnish with chopped parsley and grated Parmesan. Serve hot.