1. Heat oil in a large saucepan over medium heat. Add onion and cook, stirring frequently, until tender, about 6 minutes.
2. Add beef, in batches if necessary, and cook, breaking up with a wooden spoon, until browned.
3. Add chilli powder, cinnamon, cumin, allspice, cloves, bay leaf, chocolate, beef broth, tomato sauce, cider vinegar, and red pepper. Stir to mix well. Bring to a boil. Reduce heat to low; cover and simmer 1 1/2 hours, stirring occasionally.
4. It is the best if you now refrigerate overnight and serve the next day.