Heat the olive oil in a large pot over medium-high heat until shimmering. Add the diced onion and cook for 3-4 minutes until soft and translucent.
Add the minced garlic and cook for 1-2 minutes until fragrant, being careful not to burn it.
Add the ground beef, breaking it up with a wooden spoon, and cook for 5-7 minutes until browned and no longer pink. Drain excess fat if needed.
Sprinkle in chili powder, cumin, smoked paprika, and cayenne pepper if using. Stir well to coat beef and onions. Cook spices for 1-2 minutes.
Stir in the tomato paste and cook for 2-3 minutes to thicken the chili and deepen the flavor.
Add diced tomatoes, beef broth, salt, and pepper. Stir to combine and bring to a simmer. Lower heat and cook for 20-25 minutes.
Add the drained kidney beans and black beans. Stir and simmer for another 10-15 minutes to heat through and absorb flavors.
Taste and adjust seasoning with salt, pepper, or chili powder as desired. Add more broth if chili is too thick.
Serve hot with your favorite chili toppings.