Case study · Platform
Internal application platform
One Next.js application on Postgres that replaced a drawer full of spreadsheets. Built, shipped and maintained as its only engineer, and now used daily by the trade sales and marketing teams.
How it started
Not as a platform. It started as a single tool — a way for the trade sales team to build a quote without hand-editing a spreadsheet — and the second and third tools followed because the first one had already solved the boring parts: authentication, data access, PDF generation, deployment. At that point it was cheaper to add a route than to start a new project, which is the moment an application becomes a platform whether you planned it or not.
What runs on it
- Trade quote builder — handles roughly 200 quotes a month, with PDF quotation export. The tool the whole thing grew out of.
- Contracts app — generates and tracks influencer agreements through their lifecycle.
- Automated media pipelines — image alt-text generation, and video ingestion from the DAM through to Shopify, including a staged-upload path for large assets.
- Marketing operations hub — studio shoot planner, shot-list management and a team leave calendar, used daily by a roughly 12-person marketing team.
Technical shape
Next.js App Router with React Server Components, TypeScript throughout, Postgres for data, deployed on Vercel. Server Components earn their keep in an internal tool more than they do on a storefront: most of these screens are a database query rendered as a table, and being able to do that without shipping a client-side data-fetching layer keeps the whole thing small enough for one person to hold in their head.
What being the only engineer actually means
It means the loop is short and there is nobody to hand the hard part to. I talk to the sales team, decide what's worth building, write the spec, design it, ship it, and then find out I was wrong about something and change it. It also means the failure modes are mine: security audits of this system have found — and fixed — real access-control and authentication issues, which is a sharp lesson in what "internal tool" does not mean.
The constraint that shaped most decisions was maintenance cost rather than elegance. Anything I couldn't debug quickly at 9am with a sales manager waiting was the wrong choice, regardless of how good it looked in a diagram.