FreeCodeCamp helper bot

I wrote a gamified chatbot that helped people learning to code.

My friend was starting a site called FreeCodeCamp and they had a chatroom for users to talk to each other. The same questions were coming up over and over again, so I built a chatbot initially to deal with FAQs. I added some gamification features, and the bot was able to learn from conversations of users helping each other, and gradually took on a very interesting life of it's own...

Wiki Knowledge base - search and sharing via Chat

points system

We hosted the knowledge base Wiki on github so it was easy for the community to improve, and added a search feature in chat. Users began to help each other. Often it's hard to know exactly what you don't know. A more expert user could identify the problem, and know what to ask the Wiki for, and then use the bot to send the answer. This meant users can focus on parsing complicated questions, but use the bot to send repetitive answers.

Points system

points system

Next we added a points system. When a user said thanks @someone the other person would gain some points. You could view this with about @username and it also tied back to a status system on the main website.

As users found out they could get the reward points, it became an unspoken rule that you need to make sure to say 'thanks' to your helper.

Community labeled Data

Now the interesting part happened: users effectively started labeling the data for us.

Someone would ask a question, and someone else would answer it. It could be in the midst of many other parallel chats, or involve a few back and forth clarifications.

If there was a satisfactory answer, the recipient would say a polite "Thank you!" and the answerer would get their reward points.

By doing this they were labeling the chat logs, turning the meleé of a chatroom into structured data. We had a question, the content of the answer, and a label - the 'thank you marker'. This made it easy to extract the relevant part of the chat and add it to our knowledge base - the Github Wiki. This wiki was also open for others to jump in and edit.

Lateral Design Thinking

I like this project as it's a good example of using community design to solve an otherwise very difficult problem. Throwing GBs of unstructured chatlogs at a bot to "build a knowledge base" is very hard. But letting users indicate what are the questions and useful answers, without doing any extra work like boring labelling tasks, immediately gave us an organically growing knowledge base of coding questions and answers.

Eventually FreeCodeCamp migrated away from the Gitter platform but the bot is open source here