Hi guys, I’m Max (AKA QuoraUK), a university student working with BookBrainz as part of Google Summer of Code. My project this summer has been to build a new gamification system, that introduces rewards for BookBrainz users and recognises their achievements. Here I will explain the system and the features I’ve implemented.
My original specification for the gamification system is here. To summarise, the idea behind gamification is to add game-like elements to the site in order to make it more engaging for users. The plan for the gamification of BookBrainz was:
- Add badges and titles for users to earn on the BookBrainz site
- Allow users to display badges and titles on their profile page
- Encourage regular and high quality content
To implement this plan we have added 12 achievement tracks – once an achievement track is completed a title is unlocked. The artwork for the badges is currently “programmer art” and we are very open to other people designing replacements for them. This could be a part of this year’s Google Code-In. The achievements that will be available on launch are:
All of these are unit tested and have unique badges for each tier on the track. If you would have already unlocked these achievements before the system was launched, you will earn them with your next revision/creation. Badge templates are available for developers to introduce new badges and adding achievements can be as simple as making a badge and adding a few lines of code.
The gamification system also brings some changes to the profile page. There is now a badge box which can contain your three favorite badges. Additionally, your selected title is shown next to your username. You can select your favorite badges in the new achievements menu on the profile, then drag and drop your favorites into the boxes. Titles can be selected by going to Edit Profile, and selecting them from the drop down menu.
On creation of an entity or revision you will now see an alert if an achievement is unlocked. This will prompt you to go to your profile page and set the ones you want to display. Usernames in other areas of the site can be hovered over in order to see the title they have set.
Here is a demonstration video I’ve made for the system:
Commits and Specification
My commits for the system are available here:
Some further work that could be done on this system (potentially as part of Google Code-In):
- Adding achievements for revising different entity types (most of the work is done here, adding badges and some logic for each entity type is all that is needed).
- Add achievements for making use of new site features, such as commenting, adding relationships, or filling out your profile.
- Display achievement progress on the achievements page.
- Introduce a leaderboard system, showing who has the most achievements, and other statistics.
- Improve badge artwork.
- Add the achievement admin system (waiting on admin authentication system).
- Add manually awarded achievements such as Star Editor, Patcher, Bug Hunter, Adventurer (these are easy to implement, they just need art for badges).
- Mozilla open badges and Discourse integration.
Reflections on the Project
I managed to complete almost everything I set out to do in the specification except for Discourse and Mozilla Open Badges integration. Instead I focused on suggestions by my mentors such as drag and drop badge selection and implementing more achievements. I also completed work on the recruiter achievement (invite friends to join the site) but changes in the registration system after its completion meant a complete remake was required, which I didn’t have enough time to complete. There is also an admin system which will allow achievements to be added manually when a user does something of note which cannot be automatically rewarded. This is almost ready to merge, but the authentication system is not ready for it at the time of writing.
I feel like I have learned a lot in this project and it has done a lot to teach me about real-world software development. I have learned much more about git and how it is used in the real world. I have also become involved in the MetaBrainz community which I will continue contributing to over the next year.
I had a lot of fun working on this project and I want to continue working this and other open source projects in the future. I wouldn’t have been able to do this without the Google Summer of Code project, and without my mentors Leftmost and LordSputnik, so a special thanks to them. I hope you have as much fun playing with the achievements system as I did making it.