by wallysalami


Gamified Education

A website to help gamified courses, built with Django (Python).

Demo is available here. Use "demo" as username and "demodemo" as password. The first page load may take a few seconds.


Life in school is very boring. Teachers usually keep talking on and on while students passively watch them. The main goal is usually getting good grades in tests, instead of practicing the concepts.

But it doesn't have to be like that. There are modern methodologies like Active Learning, Flipped Classroom, and Gamification in Learning. These concepts can make a huge difference in motivation and performance. I recommend watching this Extra Credits video and this TED from Salman Khan.

This app targets the Gamification part of the equation.

I give my students an activity (like a small project) in every class. Each activity has many tasks (some are optional), and the students get points when completing them. Then they access this website to see their progress, the class rank, the videos, the links to the theory files, etc.


  • Login system for students and instructors to access their classes.
  • Invitation by email. All user data is set in admin page, but the students/instructors can create and reset their password.
  • List of activities and tasks, in which students earn XP points. Some of them can be optional and stay hidden until a grade is given.
  • Achievements with automatic rules or manual input.
  • Score ranking, with a customisable size to hide students at the bottom and not upset them.
  • Blog posts (using Markdown).
  • Widgets to display due dates, links, tips, etc (also using Markdown).
  • Responsiveness to small and big screens.


All data is managed in Django's admin. I've made some customisations to help data input.


There are many ways to install and run this project.


Heroku is a cloud platform as a service (PaaS) supporting several programming languages. It allows customers to develop, run, and manage applications without the complexity of building and maintaining the infrastructure of a server.

You can create a free account here and then put this project online by clicking the button below:



Docker is a tool that packages an application and its dependencies in a lightweight virtual container. You can download it here. After installation, use the following steps to run this project in your computer.

  1. Clone/download this repo.
  2. Navigate to the repo folder in your terminal.
  3. Type docker-composer up.
  4. Open another terminal tab/window in the same folder.
  5. Type docker-compose exec web python migrate to create the database tables.
  6. Type docker-compose exec web python createsuperuser to create the initial user for the website.
  7. Go to in your browser.

Manual Installation (macOS)

  1. Install Homebrew.
  2. Install Python 3 running brew install python3 in your terminal.
  3. Install PostgreSQL.
  4. Create the database with psql -U postgres -d postgres -c 'CREATE DATABASE gamified_education'.
  5. Clone/download this repo.
  6. Navigate to the repo folder in your terminal.
  7. Run pip3 install -r requirements.txt to download the dependencies.
  8. Run python3 migrate to create the database tables.
  9. Run python3 createsuperuser to create the initial user for the website.
  10. Run python3 runserver.
  11. Go to localhost:8000 in your browser.

Data Model

I should make a Wiki with all the details, but here is the gist of it:

  • A Course has Assignments (e.g., modules or lessons), Tasks (e.g., exercises) and Badges (medals).
  • A Course has Classes.
  • A Class has Posts and Widgets.
  • A Class associates multiple Assignments with multiple Tasks, giving a XP goal to each combination. This allows each Class to have different grading rules.
  • A Class has Students.
  • A Student gets Grades from each Assignment/Task combination (as a percentage).
  • A Class selects some (or all) Badges from the Course.
  • A Class can have Criteria to each Badge, giving some goal to an Assignment and/or Task.
  • A Student gets Achievements from each Class Badge (as a percentage).
  • A Class has Instructors, which can see the Grades of every Student.

Some of the Dependencies