Heat olive oil in a wide skillet over medium heat. Add onion and garlic; sauté until soft and smelling amazing, about 3-4 minutes.
Add ground beef. Break it up and cook until nicely browned, 5-7 minutes. If there’s excess fat, drain a little, but don’t rinse away all the flavor.
Stir in cumin, coriander, paprika, cinnamon, turmeric, and cayenne. Cook for 1-2 minutes so the spices bloom and wake up the kitchen.
Pour in crushed tomatoes and beef stock. Bring to a gentle simmer. Scrape up any flavorful bits from the bottom and keep it simmering for 15-20 minutes to develop depth.
Season with salt, pepper, and a splash of lemon juice or honey if you want a touch of brightness. Simmer another 5 minutes to meld flavors.