Work / Case study 06 / Internal tool
Studio Operations
Every studio eventually hits the same wall: the work is going well and the administration of it is going badly. This is the tool built to fix that here — and the clearest demonstration of what an internal system for your business would look and feel like.
Six tools, none of which knew about each other.
Projects tracked in one place, time roughly estimated in another, invoices written in a document, domain renewal dates existing only as calendar reminders someone eventually dismissed. Each individually fine. Collectively, a business with no single view of itself.
The concrete failures were the ordinary ones. Work delivered and not invoiced for weeks. Recurring maintenance fees that quietly stopped being charged. A domain renewal nearly missed — the sort of mistake that takes a client's site offline and costs far more than the renewal. And no honest answer to the most important question in a services business: did that project actually make money?
Existing project management tools were all built for teams. Every one of them charged per seat for collaboration features that a single-person studio will never open, while modelling none of the things that actually matter here — domain renewals, recurring fees, per-project profitability.
A workspace shaped like the business, not like a category of software.
- Projects and tasks. Every client engagement with its status, its links, its notes and its outstanding work — one place where "what's live, what's waiting on the client, what's overdue" is a glance rather than an investigation.
- Time tracking that feeds pricing. Hours recorded against projects so the next quote is informed by what the last one genuinely cost. Fixed-price work is only honest if you measure it.
- Money. Priced line items, invoices and payment status. Delivered work becomes an invoice as a step in the process, not a task remembered on a Sunday.
- Renewals. Domains, hosting and recurring maintenance fees tracked with their dates and values — surfacing before they expire and before they're forgotten.
- Charts worth looking at. A small number of honest views — income over time, where hours are going, what's outstanding — rather than a wall of decorative metrics.
- An assistant over the data. A question box answering from the studio's own records: what's unpaid, what's due this month, which project is running over.
Eight tables, strict types, and security at the bottom of the stack.
Next.js with the App Router and TypeScript in strict mode — no untyped escapes — over PostgreSQL through Supabase, hosted in London. Every table carries row-level security scoped to the owning user, so access is enforced by the database rather than trusted to the interface.
- Security that can't be bypassed by a bug. Row-level security means a mistake in the front end can't leak another account's data. In a multi-user client system, this is the difference between a defect and a breach.
- A right-sized model. The assistant runs on Claude Haiku — around 90% of the capability of a larger model for this kind of task, at a fraction of the cost. Model selection is an engineering decision, not a status one.
- Strict TypeScript. A whole category of "it worked yesterday" failures eliminated before the code ever runs.
- Mobile-first. Time gets logged and statuses get updated away from a desk, or they don't get updated at all.
- Boring deployment. Push to the branch, it's live, with preview deployments to review changes first. The deploy is not an event.
- Next.js 16
- TypeScript (strict)
- Tailwind 4
- shadcn/ui
- Supabase
- PostgreSQL + RLS
- Claude Haiku
- Recharts
- Vercel
Why this matters to a client, not just to the studio.
A studio that hasn't solved its own operations problem is not a credible choice for solving yours.
- The pattern is transferable. Jobs, time, money, recurring obligations and a view of the whole — the same shape fits a garage, an agency, a clinic, a trades business or a consultancy.
- Nothing bills itself late. Delivered work and recurring fees are visible as states, so revenue stops depending on memory.
- Pricing becomes evidence-based. Knowing the real cost of the last project is the only defensible basis for quoting the next one.
- Renewals stop being risks. The failure mode nobody plans for — an expired domain taking a live site down — becomes a dated row on a screen.
- Proof, not promises. This tool is used daily. It's the honest answer to "have you built something like this before?"