// Work Related

I built a productivity app by talking to Claude for a month

A couple weeks ago I wrote about what happens when you spend eight days building with Claude. That post covered the early arc — figuring out how to work with an AI that remembers context, learning what’s possible when you stop thinking in tickets and start thinking in conversations. I didn’t stop...

A couple weeks ago I wrote about what happens when you spend eight days building with Claude. That post covered the early arc — figuring out how to work with an AI that remembers context, learning what’s possible when you stop thinking in tickets and start thinking in conversations.

I didn’t stop building. This is what came out of it.

I don’t know how to code. I should get that out of the way early because everything that follows might seem like it requires that I do.

Over the past month I’ve been building a personal productivity tool called Triage. It runs on my phone, my iPad, my laptop. It pulls from Apple Reminders, Monday.com boards, captured voice notes, Threads posts, meeting action items, and a catch-all inbox I can hit from anywhere. Everything flows into a single prioritized stream I check a few times a day.

I built the whole thing in conversations with Claude. No React, no frameworks, no build step. Vanilla HTML, CSS, and JavaScript. The kind of code a person who doesn’t write code can actually read and understand.

Triage desktop app showing a three-pane productivity interface
Triage on desktop: sidebar, river, and detail pane

The problem it solves

My day touches a lot of surfaces. I manage a small team. Some of my work colleagues use Monday for project tracking.  I have personal reminders, notes from meetings that are generating a steady stream of action items. I capture thoughts on my phone while walking the dog. I track posts on Threads. I have a daily RSS digest that surfaces things to read.

None of these systems talk to each other, and I was spending real energy keeping track of where things lived. The mental overhead wasn’t the tasks themselves. It was remembering which app had what.

I tried to make Obsidian the app for a while. It’s great for notes and thinking, but it’s not a task manager and it doesn’t want to be one. What it turned out to be is the perfect datastore and connective tissue — everything gets captured into Obsidian, and Triage reads from it. The app I couldn’t find ended up building on top of the system I already had imagined.

What Triage does

Everything flows into one place and gets ordered by urgency. I call it a river because that’s how it feels. Today’s work surfaces with visual weight. This week’s work sits below it, quieter. Older stuff fades. Nothing hides in a folder.

New items arrive unsorted. A few times a day I open the Sift view and swipe through a deck of cards, assigning each one a priority and a project. It takes about 30 seconds. That’s the triage.

Items from different sources keep their identity. A Monday board item shows its status dot and assignee. An Apple Reminder with a time alert shows a bell icon and stays read-only. A captured thought from my phone shows where it came from. They all live in the same stream but you can tell what’s what.

There’s a morning and evening ritual too. Morning pulls in new reminders and shows today’s priorities. Evening summarizes what got done. The river resets.

Triage mobile app showing morning river, sift cards, and projects views
Mobile: morning river, sift incoming items, project overview

What surprised me about building this way

The thing I keep coming back to is that the app looks like something I would have hired someone to build or paid an annual fee for — like I’ve done many times before. It has a dark theme with warm tones, not the default gray-on-white that screams “template.” There’s typography that actually communicates hierarchy. It’s responsive across phone, tablet, and desktop and even has a 3-pane layout on wide screens with a sidebar, river, and detail panel.

I didn’t write CSS for that. I described what I wanted and iterated. “The background should be warm, not cold.” “The first item should feel more important than the rest.” “Monday items should be visually distinct but not distracting.” And then we’d go back and forth until it was right.

The part that’s harder to explain is that the building process itself changed how I think about the tool. I’d describe something, see it, realize what I actually wanted was different, and describe that instead. The feedback loop is immediate. There’s no sprint planning. No tickets. No waiting for a build.

The stack

For the techno-curious:

  • One HTML file. Around 3,000 lines. Everything is in there.
  • A Python backend that serves the API, handles Monday.com integration, manages the Threads connection, and runs the brain capture endpoint.
  • The brain capture system is a small FastAPI server on a VPS. It accepts thoughts, URLs, and voice notes from iOS shortcuts, browser extensions, or the terminal, classifies them with Claude Haiku, and routes them to my Obsidian vault. From there they surface in Triage.
  • Apple Reminders sync via a Swift helper that bridges the macOS Reminders database.
  • The whole thing runs as a PWA on my phone. No app store. Just a bookmark.

What’s next

I recently built a Threads API wrapper so I can unpack shared threads, extract links, and route them into my reading queue automatically. Someone shares a post with five course links, and they’re in my inbox for triage within seconds.

I’ve registered triagemobile.app because … I don’t know. Maybe there’s something here beyond a personal tool. Or maybe it stays exactly what it is — something I built for myself that makes my days a little less scattered.

Either way, the process of building it has been the most interesting part. A month of conversations, shipped incrementally, never waiting for anyone. Just describing what I need and watching it appear.


Built with Claude. Running on vanilla HTML/CSS/JS. Screenshots and more at triagemobile.app.