Heat olive oil in a large pot or Dutch oven over medium-high heat. Add ground beef and cook until browned, breaking it apart with a spoon. Drain any excess fat.
Add chopped onion and cook until softened, about 3-5 minutes. Stir in minced garlic and cook for another minute until fragrant.
Stir in diced tomatoes (undrained), kidney beans, black beans, tomato sauce, chili powder, cumin, smoked paprika, and cayenne pepper (if using).
Pour in beef broth or water. Bring the mixture to a simmer, then reduce heat to medium-low, cover, and let it cook for at least 10 minutes to allow flavors to meld.
Season with salt and black pepper to taste. Serve hot with your favorite toppings.
Notes
For a spicier kick, add a pinch of cayenne pepper. Top with shredded cheese, sour cream, or fresh cilantro. Serve with cornbread or tortilla chips.