FML
aka
Fix My Life
aka
Yet Another Todo App (but with points)
FML is an app in which you give yourself tasks to do, and assign various point values to them. You log the completions of the tasks, and clock up a running total of points. In other words, it’s a standard task tracking app with elements of gamification. It also has an ugly purple color scheme. You can sign up and use it here. The source code is available here.
The motivation for this was playing games like Rimworld, where you have stewardship over a number of characters and you have to achieve various aims, while simultaneously keeping them happy, defined in terms of a number of “needs,” eg. food, rest, comfort etc. This model, which was first established in The Sims, places a lot of emphasis on milking as much productivity out of the day/night cycle while keeping these needs satisfied to a minimum level so your charges don’t fall apart.
I know what you’re thinking: this sounds like a perfect metaphor for the treadmill which is my life under capitalism. Those games are set up in such a way that you’re compelled to optimize the use of time within the day in pursuit of maximum efficiency, and that this process becomes a lot of fun.
I’m sure you can see where this is going: “What if my real life were like that?” Hell yeah, let’s build a skinner box around ourselves. At least it’s open source.
How it works
You create a new task by clicking the +
button in the top right. This presents the usual kind of form, here you can fill in a name, the points value of the task, select if it should be recurring or not, and assign to it a tag. This control will also let you define a new tag.
Upon clicking Save
, a card representing the task is added to the main interface, and if a Tag was chosen, an empty “meter” for that tag will appear at the top of the page. Click the Complete!
button for your newly minted task, and you will see points added to your total, shown in the top right of your page. You will also see a glowing pink “ghost” of the points value escaping from where you clicked, much like in an RPG game, and you will hear a pleasing sound effect. This is designed to add to the dopamine reward, skyrocketing your productivity and motivation.
There's also a Sublime Text/Atom style autocomplete interface for quickly completing tasks, accessible by pressing Space.
Type to search, use the arrow keys to select a result, and hit enter to complete the task.
You will also, assuming it is there, see the meter at the top fill up with an amount proportional to the points value assigned to the task. To set how many points the meter requires in order to be filled, click the tag icon on the side of the task card. This will bring up a form for editing the tag, where you can set the name, the colour and aditionally hide the meter.
The amount of points needed to fill the meter is specified in terms on the goal per week.
So if the GPW of a tag is 10 and you have completed a 1 point task with that tag 3 times in the last 7 days, the meter will be sitting at 30%. Note that this is a rolling 7 day window and it does not tick over every monday morning.
Finally, after completing your first task you will see the Combo
value in the top right of the page tick up to 2x
. This means that any subsequent tasks completed will earn twice their value, in the manner of a classic fighting game. The crucial point is that this value will reset to zero if a day passes without any tasks being completed, motivating you to continue your streak. If you complete tasks every day for a number of weeks, the points awarded will increase geometrically, elevating your score to the stratosphere.
Design
FML is developed in Ruby and React. The ruby end is fairly conventional, but the react side is built with a homemade design in place of tools like redux or react-router. This was done as an exercize to become more intimately familiar with that workflow, and ultimately served as an education in why those tools exist.
A full explanation of the design can be found in the README over at the github repo.
Once again, a running instance of the app is available at http://fml.cleverna.me