Premise

Fully functional web app with Neon (in 40 minutes)

Jul 15, 2026 · 9 min

Forty minutes. That is roughly what sat between an empty repository and pastmonday.com taking signups — auth, a weekly calendar, tiered billing, referral credits, file uploads, and an AI chat that reads the user's own calendar. Work that used to be a quarter of somebody's year, described to an agent in plain English and shipped before the coffee went cold.

We are not that interested in the speed, honestly. Speed is what every demo advertises. What made this run worth writing up is where the human time went: four reusable skills carried the build stage by stage, and the person at the keyboard spent almost all of those forty minutes at approval gates, looking at screens and deciding whether they were good enough. No glue code, no tab full of API docs. An older industry has a word for that arrangement — a factory — and the longer we sat with it the less it felt like a metaphor.

TL;DR

  • Four staged skills — foundation, landing page, backend, dashboard — took an agent from an empty repository to a shipped product in about forty minutes.
  • The human time went into approval gates between stages: taste decisions, not integration work.
  • The entire backend is one vendor. Neon Postgres holds the data, Neon Auth holds identity, the Data API serves reads, object storage takes the uploads, and the AI gateway routes the chat — plus Stripe for money.
  • Every operation that touches money or limits is a single atomic SQL statement. Quota first, then credits, else nothing gets inserted.
  • The skill is the how. The brief is the what. Same four skills, different one-page brief, different product next time.
  • You can run the whole line yourself — the four stages are on the shelf below, and the second half of this post is the how-to.

Resources

The factory, the product it shipped, and the platform it runs on:

The line, at a glance

One page goes in, a product comes out, and a human stands at four gates in between. Everything else in this post is detail on this picture.

PROJECT.mdthe brief — one pageset-project-structurefoundationgateset-landing-pagemarketing pagegateset-app-backendmoney and limitsgateset-dashboard-gated-app-uithe productgatepastmonday.comshipped

Each diamond is a stop. The agent does not roll through them; it parks, shows its work, and waits. The four stops are the entire human footprint on the build.

The brief is the what

A factory only works if the spec and the production line are separate things. Here the line is the four skills — each one an opinionated, staged procedure with its own gates and its own banned-pattern lists. The spec is a single page called PROJECT.md: what the product is, who it is for, what the tiers cost, which reference sites the design should argue with. The skills never learn what you are building. The brief never says how.

# PROJECT.md — the one page the factory reads

What: a weekly review app — plan Monday, review Friday.
Who: individual operators who live in their calendar.
Tiers: free (1 entry, small AI budget), pro, max.
Design: warm, editorial, no dashboard-gray. Reference: (two sites).
Voice: direct, second person, no exclamation marks.

This is the part that makes forty minutes repeatable instead of a stunt. Point the same four skills at a different page and you get a different product built to the same standards — same schema conventions, same quota paranoia, same design gates. When a stage produces something you dislike, you improve either the brief or the skill, and the fix carries into every future run. A prompt gets you one app. A line gets you the next one too.

Running the line yourself

Before anything else you need accounts and keys, and it is the least glamorous five minutes of the process: a Neon project (the free tier is fine to start), a Stripe account in test mode, an empty git repository, and an agent that runs skills — we used Claude Code. Then stock the shelf. Each listing on the site has a copy button for its install prompt; pasted into your agent, it pulls the files down and the skill shows up as a slash command:

Install this skill:
api.generalized.dev/install/kubeden/set-project-structure

Install this skill:
api.generalized.dev/install/kubeden/set-landing-page

Install this skill:
api.generalized.dev/install/kubeden/set-app-backend

Install this skill:
api.generalized.dev/install/kubeden/set-dashboard-gated-app-ui

Write your PROJECT.md (steal the shape above), drop it in the repo root, and run the stages in order. The sequence looks like this from the inside:

$ mkdir pastmonday && cd pastmonday && git init
$ # write PROJECT.md, then:
$ claude

> /set-project-structure
    reads the brief, asks what it can't infer, lays the skeleton:
    schema, env keys, design tokens, placeholder service clients.
    STOPS — approve the plan before any UI exists.

> /set-landing-page
    real copy from the brief, marketing page, motion.
    STOPS at a design gate — approve it or say what's off.

> /set-app-backend
    wires auth, data, storage, AI gateway, Stripe, quotas.
    STOPS once, at a plan gate, before touching money.

> /set-dashboard-gated-app-ui
    app shell, calendar, settings modal, streaming chat —
    then reviews its own screens before handing over.

Between the first and second stage there is a chore the fence above glosses over: the foundation stage leaves an env file full of named slots, and you fill them — the Neon connection string, the Stripe test keys, the auth secrets. Five minutes of copy-paste from two dashboards. After that the stages pick their keys up from the seams the foundation laid, which is the point of laying seams.

Two pieces of advice from having done it. First, do not rubber-stamp the gates — they are the only place your taste enters the product, and a stage will happily regenerate against specific complaints ("the hero type is too tight, the tier cards read like pricing spam") far better than vague ones. Second, resist the urge to touch the code between stages. If something bothers you, say it at the gate. Editing under a running factory is how you end up owning the glue again.

What each stage actually did

Stage one, the foundation. It reads the brief, asks about anything it cannot infer, and lays everything the later stages will stand on — then stops before a single screen exists. The gate here is a plan review: you are approving a schema and a set of seams, which is the cheapest possible moment to change your mind.

set-project-structure

stage 1 · the skeleton

Next.js appApp RouterDrizzle schematables + constraintsEnv seamsnamed key slotsStub clientsone per service

Stage two, the landing page. Real copy from the brief, tasteful motion, and a banned-pattern list that refuses the generic AI-landing look by instruction rather than by luck. This is the gate we lean on hardest, because a marketing page is pure taste.

set-landing-page

stage 2 · the storefront

Copywritten from the briefDesign languagetokens + reference sitesBanned patternsthe generic look, refused

Stage three, the backend. The stubs become a server-authoritative backend: auth, data, storage, AI routing, payments, quotas. One plan gate before it touches money, and every enforcement rule lands in the database rather than in a client that can be argued with.

set-app-backend

stage 3 · money and limits

Auth wiringFKs into neon_authQuotasatomic SQLStripeidempotent webhooksStorage + AIpresigned PUTs · gateway

Stage four, the dashboard. The product itself — app shell, the weekly calendar with its entry modals, settings and billing, the streaming chat that reads the user's own calendar. It reviews its own screens against the design language before asking for the last approval, which catches most of the visual drift before you ever see it.

set-dashboard-gated-app-ui

stage 4 · the product

App shellsidebar + user blockWeekly calendarentries + modalsAI chatstreaming, calendar-awareSelf-reviewagainst the design language

Four stages, four stops. Everything between the stops — the part that used to be the job — ran without a hand on the keyboard.

One vendor, five services

The backend consolidated on Neon entirely, and the shape of it matters more than the logo. Postgres holds the data. Neon Auth holds identity, and the factory has a hard rule about it: never mirror the auth schema. Application tables hold foreign keys straight into the auth schema's user table, so there is no sync job and no second source of truth to drift out of agreement at 2 a.m. The Data API serves HTTP reads. Object storage takes uploads through presigned PUTs — and since Neon's storage branches with the database, a preview environment gets matching files and rows rather than production leftovers. The AI gateway routes the chat and meters the tokens.

pastmonday.com

the app — server-authoritative

Next.jsone deployment

Neon

one backend vendor

Postgresthe dataNeon Authidentity — FKs straight inData APIHTTP readsObject storagepresigned PUTs · previewAI gatewaychat + metering · preview

Stripe

the money

Checkout + webhooksevent-id ledger, idempotent

Two of the five services were in private preview during the run, which produced our favorite moment of the build. The gateway's official SDK provider was not installable yet. The agent did not stop to complain. It probed the gateway, found the OpenAI-compatible endpoint, and wired the chat against that instead. If your primitives answer HTTP, agents will integrate you before your SDK ships — that is not a prediction, it happened here, against a preview service, unsupervised.

Money is one statement

The backend stage carries one conviction worth spelling out: a feature can be wrong and apologize later. Money cannot. So every operation that touches billing or limits compiles down to a single atomic SQL statement. Creating an entry checks the tier's quota and spends the credit inside the same statement that inserts the row — quota first, then credits, else nothing gets inserted. Two concurrent requests cannot both squeeze through the last slot of a free tier, because there is no gap between the check and the write for them to race in.

Stripe gets the same paranoia. Webhooks are deduplicated against an event-id ledger, so a retried delivery cannot credit an account twice. The tiers — one entry and a small token budget free, ten entries and a bigger budget on pro, unlimited above — are enforced where the data lives, not in a client that can be talked out of its convictions. None of this is exotic. It is exactly the discipline that erodes first when a tired human is hand-integrating five services at 11 p.m., and it is the reason the backend skill exists: the rule got written down once, and now it does not get forgotten.

A full working SaaS — identity, data, files, AI, money — now fits in one brief, four skills, one backend vendor, and one Stripe account.

The product, forty minutes later

Receipts, as always. This is what came off the line — no design pass afterward, no cleanup sprint, the screens as the fourth stage left them.

pastmonday.com landing hero
The landing the second stage argued for — hero, copy, and a live week strip.
pastmonday.com pricing tiers
Pay for what you write — the tiers exactly as the brief priced them.

Where the assembly line points

While we were publishing factory skills that teach agents to build on Neon, Neon started shipping agent skills that teach agents to use Neon. Nobody coordinated that. The factory and the platform are meeting in the middle anyway, and that convergence is our answer to the question in the title. When the whole process is automated, producing a working web application stops being the scarce thing — the way weaving cloth stopped being the scarce thing. What is left over is the brief and the gates: knowing what is worth building, and having the taste to say "no, again" at four checkpoints. That was the entire human contribution to this run. It also decided whether the product came out good.

So the factory is on the shelf, install curves attached. Take the four stages as they are, or read them and disagree — the banned-pattern lists, the money rules, the gate placements are opinions, and the opinions are the part worth arguing with. Fork the line. Publish your stations. The next factory should have someone else's name on it.

GeneralizedThe ledgerBack to the ledger

More from the ledger

Premise

Why your skills are generalized

For a century, expertise was a moat because nobody could copy it without hiring you. That just ended. The case for signing your method instead of watching it get reinvented anonymously.

Jul 2, 2026 · 6 min

Guides

Anatomy of a great SKILL.md

A skill is one file, and the agent that runs it has never met you. What separates the file people keep installed from the one they delete by lunch.

Jun 26, 2026 · 6 min