Prep the aromatics. Dice the onion and bell pepper.
Mince the garlic. Seed and finely chop the jalapeño if using. Rinse and drain the beans.
Brown the beef. Heat a large pot or Dutch oven over medium-high.
Add oil, then the ground beef. Break it up and cook until well browned with crispy edges, about 7–9 minutes. Season lightly with salt and pepper.
Spoon off excess fat if needed, but leave a little for flavor.
Soften the veggies. Add onion, bell pepper, and jalapeño to the pot. Cook 4–5 minutes, stirring, until softened and lightly golden.
Bloom the spices. Stir in garlic, chili powder, cumin, smoked paprika, oregano, coriander, and tomato paste. Cook 1–2 minutes until fragrant and the paste darkens slightly.
This step wakes up the spices and builds a richer base.
Deglaze and build the sauce. Pour in a splash of broth and scrape up any browned bits. Add the remaining broth, crushed tomatoes, cocoa or espresso (if using), bay leaf, and a pinch of red pepper flakes or cayenne if you like heat. Stir well.
Simmer low and slow. Bring to a gentle boil, then reduce to a steady simmer.
Cook uncovered for 25–30 minutes, stirring occasionally. The chili should thicken and become glossy. If it looks too thick, add a bit more broth or water.
If it’s thin, simmer longer.
Add the beans. Stir in the kidney and black beans. Simmer another 10 minutes so the flavors meld and the beans warm through. Taste and season with more salt and pepper as needed.
Finish and serve. Remove the bay leaf.
Squeeze in the juice of half a lime to brighten the flavors. Ladle into bowls and top with cilantro or green onions. Add Greek yogurt or sour cream, cheese, or avocado if you like.