Sinatra Todo – a web frontend to a plain text todo file

I wanted to share an application I created that I’ve been using for a few months called Sinatra Todo.

Why I built it

I’ve been using GTD and other time management systems for several years now and have seen myself go through two stages:

  1. Using high tech, shiney, whiz-bang gadgets to track my todo list. (e.g. Tracks, Emacs Planner Mode)
  2. Using low tech, simple tools (e.g. index cards, sheet of paper, free form todo list)

The big problem with the high tech tools is that I would spend too much time tinkering with how my tasks were organized and not enough time doing the actual tasks. The low tech tools also suffer a problem, I would become overwhelmed by the quantity of tasks and would easily loose focus and become disorganized.

Last time when I decided to go back to a low tech tool, I decided to just try to keep everything in a semi-structured text file in Emacs. I found todo-list-mode by Billy Lamberta and liked that it’s just a simple Emacs mode that highlights each line of text according to the first character. So a line starting with ‘1’ would be red (todo today), ‘2’ would be a paler red, etc. It also highlighted hashtags at the end of lines which worked perfect for GTD contexts and simple categories. Nice and low tech.

The one downside was that it only worked in Emacs. When I’m at my desktop, I have Emacs always at hand but sometimes I’m in another part of the house or away from home and need to see my todo list. This is where Sinatra Todo comes in…


Sinatra Todo is a stupidly simple Sinatra app that understands the format of the todo-list file and shows the contents as a set of HTML pages. It will automatically pick up all of the different priorities and tags in the file and auto link them. So if you want to see everything for the “WorldDomination” project, you can click that tag and Sinatra Todo will only show you those tasks. It doesn’t require that you use Emacs or todo-list-mode either, just make your todo list follow the same format.

Getting involved

I’ve been really happy with sinatra_todo so far but if you would like to modify it in any way, feel free to fork it on Github and hack away. There are a things I might add in the future:

  1. Tests. Normally I use TDD but this started as a late night hack to see if I could throw something together.
  2. The ability to add a new todo item. I think this could be a simple form that will just append the content to the Todo file.
  3. The ability to edit an existing item. This could work like adding a new todo item but would overwrite an existing line.
  4. Some kind of integration with Redmine’s issues. I’m thinking of just using a simple cronjob to export my issue list to a file will work though.

If you add something useful to your fork, please send me a pull request and I’ll see about integrating it.

Post a comment if you try it out, I’d love to see if anyone else found this valuable.