Dice the onion into 1/2-inch pieces, celery into 1/4-inch pieces, and bell peppers into 3/4-inch pieces. Zest the limes and juice them into a small bowl. Chop the fresh cilantro just before you need it. Measure out all spices (smoked paprika, oregano, chili powder, ground cumin, cocoa powder, and brown sugar) into a small bowl so they're ready to add quickly. This prep work ensures smooth cooking without interruptions.
Heat a large pot or Dutch oven over medium-high heat. Add the ground beef and cook for 8-10 minutes, breaking it into small pieces with a spoon as it cooks, until the meat is browned and has released its juices. Once cooked through, transfer the beef to a clean plate, leaving about 1 tablespoon of the fat in the pot—this fat carries flavor and will help build your chili's foundation.
In the same pot with the beef fat, add the diced onion and celery and sauté over medium heat for 7-8 minutes, stirring occasionally, until they begin to soften and the onion becomes translucent. Then add the balsamic vinegar and diced bell peppers, cooking for an additional 3 minutes to lightly soften the peppers and allow the vinegar to reduce slightly. I like using balsamic here because it adds a subtle sweetness and acidity that balances the richness of the beef beautifully.
Add the spice mixture from Step 1 to the pot and stir constantly for about 1 minute—this blooms the spices and releases their aromatic oils, dramatically deepening the flavor. Then stir in the tomato paste and cook for 2-3 minutes, allowing it to caramelize slightly against the pot. Finally, add the diced tomatoes with their juices and the beef broth, stirring well to combine everything.
Return the browned beef from Step 2 to the pot along with the beans, stirring to combine. Bring the mixture to a simmer, then reduce the heat to medium-low, cover with a lid, and let it cook gently for 1 hour. The long, slow simmer allows all the flavors to meld together and the chili to thicken naturally. I find that the flavors continue developing even as it cooks, so don't rush this step—it's where the magic happens.
After the 1-hour simmer, taste the chili and adjust seasonings as needed. Stir in the lime juice and zest from Step 1, which adds a bright, fresh note that cuts through the richness of the beef and cocoa. Fold in the chopped cilantro just before serving. Ladle the chili into bowls and serve hot with optional toppings like sour cream, additional cilantro, or sliced jalapeños on the side, allowing guests to customize their bowls.