← Back to the lab Tool · in production · built AI-first

Plans

This is a delivery programme plan you can talk to. Claude builds and maintains the schedule through conversation. The team gets a proper Gantt, grid and change log in the browser. The milestones are wired to the deliverables that have to be ready for them. It was built in seventeen days. This page is about what changes when a plan stops being a drawing.

A Gantt chart of floating glass bars linked by glowing dependency threads, converging on an orange milestone diamond with its deliverable tiles beneath

Programme plans usually live in a file that one person edits, and are then redrawn for each audience. Mine lived on a whiteboard as Gantt frames rendered from a master file. That has three problems:

  • Changes aren't recorded. Nothing says who changed what, or why.
  • Effects can't be previewed. You can't see what a change does to the critical path before you make it.
  • It's disconnected from the deliverables. The plan says a milestone is on track. The deliverables say otherwise. Nobody notices until it's late.

So I built a scheduling engine into the portal, next to Deliverable Tracking, with two front doors: conversation and a browser. The programme's current plan was built wholly through conversation with Claude, and almost nothing was edited by hand. The whiteboard version was retired seventeen days after the first spec.

17dfrom first spec to retiring the old plan
135reviewed build passes
177activities and 212 dependency links in the live plan
0proposals Claude is allowed to accept

01What it does

A schedule, not a drawing

The plan takes tasks, durations, four dependency types with lag, and calendars with UK bank holidays. Dates, critical path and float are computed from those, never typed in.

Talk to it

You can ask "why is launch on that date?" and it walks the driving path. It also does what-ifs, plan health checks, slip history and replan-from-here.

Preview, then confirm

Every edit first shows each date it would move and its effect on milestones. It commits only on confirmation, with a reason recorded.

Proposals for anything that matters

A change that raises a question, such as using contingency, becomes a proposal. A person accepts it in the browser.

A traditional UI as well

Gantt and grid sit on one page. The critical path shows as a red line and baselines as ghost bars. There's a Changes tab listing every revision and its reason, and an Excel export.

Baselines on purpose

A baseline is taken deliberately, under a name, for an agreed event. None is automatic.

Views for each audience

Plan-on-a-page views are published as dated snapshots, with a record of which dates each version told whom. External readers see the schedule, not the float and contingency.

Wired to the deliverables

A task names the deliverables it produces, and each plan milestone is tied to a milestone in Deliverable Tracking. Readiness and progress come from the register, not from someone ticking a box.

Cloudflare Workers D1 R2 MCP server Scheduling engine TypeScript

02Two front doors, one plan

The design rule underneath everything is that there is one model and one writer. Claude's edits through MCP and a person's edits in the browser go through the same code path, so neither can see a plan the other can't. Each door is suited to a different job:

  • Conversation is the better way to change a plan. You describe the change, see its consequences and confirm it in one exchange.
  • The browser is the better way to read one, and to decide.

Two rules keep the trust boundary clear:

  • A Claude session never accepts a proposal, whoever it's working for. Only a person does, in the browser.
  • Time passing never rewrites the plan by itself.
The plan shows agreed intent. What has happened never moves a date by itself — it raises a prompt, and a person decides whether to replan.

The deliverable integration follows the same principle: one home per fact.

  • Forecast dates. When the plan moves, the register's forecast date for the linked milestone moves with it, and an audit entry is written.
  • Target dates. The target date changes only through a proposal that someone accepts. The plan never sets a target date itself.
  • Progress. A task that names its deliverables takes its progress from them, by points, with a planned curve and a "ready by" date.

To be honest, the integration is still early. Linking tasks to deliverables is planning work, not software, and it's only partly done. That's why every progress figure is shown beside a coverage figure. A plan that is 90% complete across the 12% of it that's linked shouldn't be allowed to look like good news.

03What it took to build like this

Plans was a multi-agent build:

  • Specs were written on a stronger model.
  • Building and review were done by separate agents on a cheaper one, each in its own worktree.
  • Merging and deploying was done only by the main session.

The work ran as eighty feature passes, thirty-eight on progress tracking and seventeen on UX. Each pass was reviewed. Reviews caught an access leak, a way to bypass the confirm step, and a record shape that would have broken the database at design scale.

It didn't go smoothly:

  • Late test failures. Repo-wide tests that pinned counts went red late, five in one night.
  • Stacked branches. Branches built on top of each other turned every upstream fix into a cascade of rebases.
  • Too many agents at once. Running eight crashed the machine.

Each of those is now a written rule.

The bill was larger than it first looked. The first measurement said 141 million tokens for three days. A proper count of the eleven days found 13.1 billion raw tokens across 62,890 API calls, 97% of them cache reads. The first figure was the final size of each agent's context, not what it cost. The working practices adopted mid-build cut the daily figure by 41%.

The bigger point is that no mainstream project tool joins deliverable readiness to schedule logic. Task trackers barely do dependencies. Scheduling tools don't know whether the things a milestone needs are actually ready. That gap is where this sits, and conversation is what makes it maintainable.

Want the thinking pointed at your problem?

Plans lives inside the Ionic client portal alongside Deliverable Tracking, so there's no public demo. If your programme plan is a file only one person dares edit, that's a conversation I enjoy having.

john@ionicconsulting.co.uk