Heat the olive oil in a large pot or Dutch oven over medium heat. Add the onion and garlic and cook until the onion is translucent, about 5 minutes.
Add the crushed tomatoes, tomato paste, red wine (if using), beef broth, oregano, basil, and thyme to the pot. Stir to combine.
Bring the sauce to a boil, then reduce the heat to low and simmer for at least 2 hours, stirring occasionally. The longer you simmer the sauce, the more flavorful it will become.
After 2 hours, taste the sauce and season with salt and pepper as needed. You can also add additional herbs or spices to taste, such as red pepper flakes for a little extra kick.
While the sauce is simmering, you can prepare your meatballs. You can use any type of ground meat for the meatballs, such as beef, pork, chicken, or turkey.
Mix the ground meat with breadcrumbs, an egg, and any desired seasonings, then roll the mixture into balls and place them on a baking sheet. Bake the meatballs in a 350°F oven for about 20-25 minutes, or until they are cooked through and browned on the outside.
Once the meatballs are cooked, you can add them to the pot of sauce and let them simmer for an additional 20-30 minutes to absorb the flavors of the sauce. Alternatively, you can serve the sauce over cooked spaghetti or use it to make meatball subs by placing the meatballs and sauce on a hoagie roll and topping with cheese.
Serve the meatballs and sauce hot, garnished with fresh basil or parsley if desired.