Learning Python, Building gtRPG

Last year I began using Python professionally for the first time, and quickly came to love the language for it’s flexibility and readability. In an effort to become more familiar with the language, I decided to build a small personal project using Python.

I was mostly using Python for automation scripting at work, so I wanted the project to also feature a web framework. I eventually settled on Flask for two reasons: 1) The “micro”-ness and extensibility of Flask seemed appealing, and 2) I found Miguel Grinberg’s multi-part Flask tutorial to be a fantastic introduction to both the Flask framework and the Python ecosystem.

So with that, I began building a gamified guitar practice app called gtRPG. gtRPG is an idea I’ve played with since my time teaching private guitar lessons - applying gamification principles to guitar practice. gtRPG attempts to enhance guitar practice using common RPG elements. With gtRPG, users can choose Categories - musical genres or activities that the User wants to improve in - and create Tasks - practice items associated with a given Category. Users can then complete tasks in practice Sessions to earn XP towards leveling up.

After about 3 months of sporadic work, I had a functional version of gtRPG. I deployed it to gtrpg.com via Heroku and began testing it out. I also shared the app on Reddit to get some user feedback and see how it performed in the wild.

Some potential improvements for the future:

  • UI Improvements: The look and feel of the site could use some work (navigation bar bugs, giant drop-down menus, tedious checkboxes, etc.)
  • Learning Paths: Pre-built series of Tasks in a given Category.
  • Model Improvements: The Category model as currently constructed proved limiting - it fails to accurately capture Tasks that span multiple Categories (e.g. A Task can fall under Country, Acoustic, and Fingerstyle, but it can only be associated with one Category). I think an easy improvement might be moving to a tag-based system.
  • Rebranding: The concept can and should be generalized for all instruments.

Overall, I learned a ton about Python and enjoyed working with Flask. For my next development project, I plan to tackle the Django web framework next as that is what I’m currently using at work.