Build the meatball base: Start by placing the torn bread into a large bowl. Add grated onion and let it soak for a minute so the bread softens fully. Stir in minced garlic, chopped onion, Italian herbs, garlic powder, grated cheese, salt, black pepper, and red pepper. This mix creates moisture and flavor before the meat even goes in.
Mix and shape the meatballs: Add ground beef, ground pork, egg, and parsley to the bowl. Use clean hands to gently mix until everything comes together. Keep the motion light so the meat stays tender. Roll the mixture into small meatballs, about the size of a walnut, and set them aside.
Start the soup base: Place a large pot over medium heat and pour in the olive oil. Add minced garlic and let it warm gently until fragrant. Stir often so it does not brown. This step sets the flavor for the entire soup.
Create the tomato broth: Pour in passata, canned tomatoes, chicken broth, and water. Stir well and bring the pot to a gentle simmer. Use a spoon to break up the tomatoes slightly so the broth stays smooth but textured.
Add the meatballs carefully: Lower the meatballs into the simmering soup one by one. Stir gently to prevent sticking. Let them cook uncovered for about 15 minutes so they firm up and release flavor into the broth.
Cook the pasta in the soup: Add broken spaghetti directly into the pot. Stir often so the pasta cooks evenly and does not clump. Let it simmer until the pasta turns tender and the broth thickens slightly.
Finish with herbs and cheese: Turn off the heat and stir in torn basil leaves. Sprinkle mozzarella into the pot or add it directly to bowls. The heat melts the cheese gently and gives the soup a soft, comforting finish.