Heat olive oil in a large skillet or saucepan over medium heat. Add the chopped onion and cook until it is soft and translucent (about 5 minutes). Add garlic and cook for an additional 1 minute, stirring frequently.
Add ground beef. Season with salt and pepper. Cook until browned, breaking it up with a wooden spoon, about 6–8 minutes.
Stir in tomato paste and let it cook for 2 minutes; this deepens the flavour.
Pour in crushed tomatoes, add oregano, basil, smoked paprika, chilli flakes (if using), and balsamic vinegar. Stir well.
Reduce heat to low, cover slightly, and let it simmer for at least 25–30 minutes. The longer, the better. Stir occasionally.
Taste and adjust seasoning. Stir in chopped fresh herbs just before serving.
Serve over your favourite pasta. Add grated Parmesan cheese.