03

SaaS products

A product that has to survive its second year is decided early, in the schema and in where the permission checks live. Both of these were built that way round: the data model and the boundaries first, features after.

Both are also genuinely multi-tenant — several people inside one workspace, with different rights — which is where the interesting problems are. Who may open this, who may invite, what happens to shared state when two people edit at once.

In this category

03

Ghost AI — a canvas where the AI designs the system with you

A collaborative system design tool for engineers. Several people edit one architecture diagram at once over a shared Liveblocks document, so nodes, edges and cursors are conflict-free shared state rather than local state synchronised by hand. An AI agent works in the same room as another editor: describe a system in prose and it returns validated canvas operations, applied through the same mutation path a human drag uses.

The diagram is not the deliverable. A second model pass serialises the finished graph into a markdown technical specification — the document an implementation agent is handed.

Next.jsTypeScriptPrisma & PostgreSQLLiveblocksTrigger.dev

The agent is not a button beside the canvas. It holds presence in the room and edits through the same API a human does.

02

JobPilot — a job platform with a browser agent that researches the employer

A full-stack job application platform. It pulls listings from a jobs API, scores each one against your stored profile, and — the part actually worth building — dispatches a real browser to the employer's own website to research them before you apply, returning a structured dossier instead of ten open tabs.

The constraint that shapes the whole build is that every model call has to return something a database column can hold and a component can render. Résumé parsing, job scoring and company synthesis all produce typed structured output rather than prose, so a bad generation fails validation at the boundary instead of arriving as convincing text in the wrong shape.

Next.jsTypeScriptBrowserbase & StagehandStructured LLM outputPostHog

Finding the jobs is an API call. Knowing who you are actually applying to is the part that needed an agent.