← All projects

Case study

Forge: project management an AI assistant can run too

My own project and billing tool, built so I can manage work by asking for it in plain language instead of clicking through forms.

Role
Design, build and run
Built with
React, Firebase, Cloud Functions, REST API, MCP
Status
In daily use

The problem

My projects lived in Notion, and the billing lived somewhere else again. Notion can do almost anything, which is exactly the problem: every simple job, like adding a task, moving a due date or seeing what's overdue, took more clicks and more structure than the work deserved.

I was also starting to do more of my planning through an AI assistant. I wanted it to see my real projects and update them directly, not have me copy things back and forth.

What I built

The core went from schema to a deployed, installable app in a single day: a data model, a REST API on Cloud Functions, a React front end and hosting. Then I moved everything over: both active Notion projects and all 57 of their tasks were imported in one go, and Notion was retired that same day.

  • Projects, milestones and tasks

    Subtasks, priorities, due dates and drag-to-reorder, grouped by brand so personal work and client work stay separate.

  • Recurring work

    Weekly reviews and monthly checks create themselves, so routine jobs never depend on memory.

  • Ideas backlog

    Somewhere to park ideas before they’re real, then promote one to a full project when it’s time.

  • Activity history

    A calendar of everything that changed, so I can see what actually happened on any given day.

  • Invoicing

    Hourly or fixed-price work turns into numbered, branded invoices that flag themselves overdue.

  • Works anywhere

    Installs like an app on my phone and desktop, from the same login.

Letting an AI assistant run it

The part that makes Forge different is its MCP server, a standard connector that lets AI assistants like Claude use outside tools. With it, an assistant can list my projects, check what's due, add or reorder tasks, log billable work and draft invoices, all from a normal chat.

It's built with the same care as the app itself. The connector has its own separate key, and it deliberately has no delete tools: deleting a project or a sent invoice is too much damage to hand to a chat by default. An assistant can create and update freely, but anything destructive still goes through me.

What went wrong, and what I changed

On launch day I opened Forge in a private window on a different browser, signed into nothing, and it loaded with all my real data. The app had no login, and the key it used to talk to the API was sitting in the page's own code, so anyone with the link had full access.

Adding a sign-in screen alone wouldn't have fixed it, because the key could still be lifted from the code and used directly. So the real fix went on the server: every request now has to come from my verified account, or from the separately-keyed connector. To prove it, I signed in with a second, perfectly valid account. It got in the front door and saw nothing, because the API refused it.

The lesson I carry into client work: a login screen isn't security. The check has to live where the data lives.

Small decisions that keep it cheap and safe

  • No always-on scheduler. Recurring tasks are created the next time the dashboard loads instead of by a background job, so the app costs next to nothing to run.
  • Money is never trusted from the browser. Invoice totals, tax and hourly amounts are always recalculated on the server.
  • Backups by default. Daily backups kept for a week, plus weekly ones kept for three months.
  • Tested before it ships. Every backend change runs a 46-check test suite against a local copy of the database first.

Results

Forge is where all my work lives now: 14 projects and 13 ideas across my own studio, a side brand and personal goals, plus the invoices for real client work.

The assistant side gets used constantly. It once audited every project against what had actually been built, sorted 61 loose tasks into 7 milestones and marked finished work as done. And the numbers in the paragraph above weren't looked up by hand: an assistant pulled them from Forge through the connector while this page was being written.

Need a tool that fits how you actually work?

Off-the-shelf software is built for everyone, which often means it's slightly wrong for you. If your team is fighting its tools, or you'd like an AI assistant working with your real data, let's talk about what a better fit would look like.

Start the conversation