Introducing Milkshake, a Sovereign, Local-First Task Manager

Not wanting to bury the lede; I built a todo list application to replace my Remember The Milk subscription, entirely using free AI tools, on a Saturday morning. Here's how...

Marcus Povey

In the latest in a long line of “oh sh*t” moments, I managed to scratch an itch and replace the todo list software I have been using since forever with a home rolled bit of software… and it took me two cups of coffee to do it. Yes, it’s just a todo list app… but it’s customised to how I want it (e.g. interfacing directly with my Obsidian second brain), and I didn’t have to touch a line of code to do it.

I have been leaning into AI quite heavily. My thesis is that, while AI is not without its problems, as a technology is really changes the maths of what has previously been possible as a one man band, and random ideas which would previously require significant activation energy to test out become much more achievable.

My RTM subscription was about to renew. and to save some cost, as well as wire up my Todo list much better to how I actually operate these days, I started with this.

Designing the spec

I began by opening up a new obsidian note and began listing out my absolute required features, and nice to haves. Broadly this was just a list of the myriad features in RTM that I actually used – lists, due dates, the “today” list. I also wanted to make sure that these tasks would appear in my obsidian daily notes, which is where I spend most of my time these days – it’s where I track my current main activities, random thoughts and ideas, links to work meetings etc.

Then, I asked the AI what it thought.

During a back and forth with the AI we workshopped the idea, refining the details needed, language choices, scope of effort. The conversation felt like the kind of development conversations I would have with team members, and while the AI was positive, it wasn’t just agreeing with everything I said, and instead pushed back on a number of design points. I agreed with some, disagreed with others.

After I was happy that all the details had been ironed out, I instructed the AI to write a prompt suitable for an agent to build it, and after a little bit of thinking (and here, I jacked up the “intelligence” of the AI) I ended up with a couple of pages of Markdown speccing out my new tool.

The build

I used a mixture of GPT Codex and Claude desktop to build the spec, using each model to check the other’s working. For the build itself, I switched to Google’s Antigravity. I’ve learnt to quite enjoy this tool, which is effectively a customised version of Visual Studio, but comes with (currently) quite a generous free allowance in terms of tokens.

Anyway, I pasted in my markdown in a clean repository and hit start.

The AI quickly spotted some points that needed clarification, so again, I had a brief chat to answer its questions. Very similar to those I’ve had hundreds of times with junior developers over the years. In a back and fourth, we cleared up some subtitles of behaviour which hadn’t been clear in the specification as written, things like how exactly to handle repeat tasks (update the task’s due date vs create a new one to keep the historic information) and how best to handle the obsidian output.

I was genuinely impressed at how good the questions were, and also that the AI chose to seek clarity straight away rather than just dive in and be enthusiastically wrong.

Anyway, clarity achieved, the AI happily went away and built the first version of my new tool.

The tool

The whole process took about an hour, and at the end, and when I fired up the docker container I genuinely did not expect anything to work.

It did.

I loaded up the page in my browser and was presented with a slick interface – clean, and perfectly usable!

Screenshot (redacted to remove my ever growing list of overdue tasks)

There was still a little more to do, the Import from RTM didn’t quite work with the .json export I had downloaded, as it looked like Antigravity had made a few false assumptions. No matter, I dropped the .json into claude desktop and asked it if it could make sense of the file. Claude was able to determine the structure logically, and after checking, I instructed it to write me a specification for the file format. I took this and dropped that back into Antigravity, which quickly spotted its mistake and made the appropriate changes. After which, all my missing tasks from RTM appeared in my new tool.

The take home

To come back to a previous point, code really is just a commodity now.

Absolutely, this tool is something I could have built myself from scratch, but it would have taken me at the very least my entire weekend and I wasn’t prepared to give that up. Obviously, the fact that it is now possible to build entire working applications over coffee is going to be … disruptive.

I’m choosing to uncharacteristically take the glass half full view… we now live in a world where the cost of trying out your latest mad idea is rapidly approaching zero. As an individual or small business, it is now possible to replicate the capabilities of large companies (legal departments, development departments, etc) with the (supervised) use of carefully instructed agents. Again, I see this as nothing more than a force multiplier for the skilled user, but one without guard rails so caveat emptor.

Leaning in, I’ve managed to largely replace a subscription to a tool with something customised to my needs and sovereign to me, for basically nothing but a morning spent asking “what if” to the tools while drinking my coffee.

I wonder what I can build next?

Visit the project on Github...

Leave a Reply