I've cycled through most of the well-known productivity apps. Notion, Todoist, TickTick, Google Calendar, various habit trackers. Each one solved a slice of the problem and then quietly fought me on the rest. Todoist is great at tasks but has no real concept of a goal you're working toward over weeks. Notion can model anything, which means it models nothing well until you've spent a weekend building a system, then another weekend rebuilding it. Calendar apps are great at time blocks and useless at tracking whether you're actually making progress on anything that matters.
What I actually wanted was one tool that treated three things as a single connected system: goals, tasks, and time-blocks. In this system:
- A task belongs to a goal
- A goal shows me whether I'm on pace
- My calendar shows me where the time for all of it is actually going
I built Agora, a single-user, local-only app that runs entirely on my own machine and can be accessed both through the browser and Telegram.
Yes, Telegram.
What is Agora
Agora takes its name from the Greek public square, the one place in a city where everything that mattered converged. That's exactly what I wanted this app to be: a single space for my tasks, my goals, and eventually my inbox, instead of five disconnected tools fighting for my attention.
Seneca argued that time is the one resource we treat as disposable even though it's the only one we never get back, and that's the problem Agora is built to solve, by making the shape of my days visible instead of scattered across apps and half finished lists.
Even the assistant that lives inside Agora carries the philosophy forward, named Zeno after Zeno of Citium, founder of Stoicism, and it speaks the way I imagine he would: short, declarative, no filler, focused only on what's actually within my control today.
Building Agora has become its own small stoic practice, a daily reckoning with how I'm actually spending the one resource I can't get back.
The features
Goals with real progress tracking, not just checklists
A goal in Agora isn't a folder of tasks. Every goal has a start date, a target date, and a computed progress (done tasks vs. total) alongside an expected progress, interpolated from where I should be today given the timeline.
Seeing "62% done, should be at 74%" at a glance is more honest than a bare percentage. Goals also track a streak, the consecutive days with at least one completed task, which turned out to be a surprisingly effective nudge to touch every active goal regularly instead of binging one and ignoring the rest for two weeks.
Tasks that infer their own status
Tasks don't need a manual "status" field I forget to update. Status is derived: if a task has a scheduled_start, it's todo; otherwise it's unplanned. That's independent of the due date, which matters: a task can be overdue and unscheduled, and the dashboard treats those as different problems needing different actions (one needs a time slot, the other needs triage). Completing or reopening a task automatically stamps or clears completed_at, and every field change is written to an append-only history log, so I can always see what a task used to look like.
A dashboard that actually answers "what should I do today"
The dashboard pulls together active goals, tasks due today, overdue tasks, unscheduled tasks, and past tasks that never got finished. On top of that, it brings a 7-day stacked bar chart of completed minutes per goal, so I can see at a glance whether my time is actually going where my goals say it should.
Drag-and-drop time blocking, not a form to fill out
The time blocking view is a 7-day hourly calendar (7am–8pm) with a live current-time line. Unscheduled tasks live in a tray and I drag them onto a time slot and they snap to 15-minute increments. Dragging an existing block reschedules it and dragging its bottom edge resizes it, which updates the task's estimated duration directly. It's the same interaction model as Google Calendar, but every block is a real task connected to a real goal, not a floating calendar event with no accountability behind it.
A chat-based assistant, for when opening the app is friction
A Telegram bot, backed by Claude and an MCP server that wraps every Agora API endpoint, lets me manage goals and tasks by texting. Messages like "mark the Agora article done," "what's on my plate today," "push tomorrow's review to Thursday," let Zeno manage everything through Telegram.
It's not a replacement for the UI, it's for the moments I don't want to open a UI at all.
Two-way Google Calendar sync, without owning my calendar
A separate background process polls Google Calendar and Agora in both directions: scheduling a task creates a calendar event, editing the event updates the task, and typing something directly into Google Calendar creates a new Agora task. It deliberately skips all-day and recurring events. Agora's recurrence model and Google's don't map cleanly enough to sync safely, and a silent data-loss bug there would be worse than just not supporting it.
Why build instead of adopt
None of this is exotic. Any one of these features exists in some other app. What doesn't exist anywhere I looked is all of them wired together with the same underlying data model, running locally, with no subscription, no account, and no vendor deciding next year that goal tracking is being deprecated in favor of an AI summary feature I didn't ask for.
Agora is small enough that I understand every part of it, and specific enough to my own workflow that it doesn't need eleven configuration screens to become usable.
That trade, less polish and generality, in exchange for it actually fitting how I work, was the whole point.