Blog / verified-scaffolds
2026-09-05
Stop asking agents to invent Next.js starters
Coding agents invent Next.js boilerplate from memory and break builds. BotKelp returns stamped catalog source over MCP instead.
Coding agents are competent at the part of an app that does not exist yet. They are sloppy at the part that has existed for years: App Router layout, Tailwind import style, Supabase cookie helpers, Prisma singletons, shadcn cn().
That sloppiness is not a model-quality problem. It is a memory problem. The training mix contains every Next.js major, every Tailwind config style, and every abandoned auth snippet. When you say “scaffold a Next app with Supabase,” the agent samples from that mix. You get a tree that looks right and fails npm run build.
What breaks
Typical failure modes we see when agents invent the starter:
- Tailwind v3
tailwind.config.tsin a CSS-first v4 repo next/routerin an App Router project- Supabase client created per request on the server with no cookie adapter
- PrismaClient constructed in every Server Component
- shadcn Button copied without
class-variance-authority - env names that do not match the code
Each of those is cheap to fix once. Agents repeat them.
A catalog is a different contract
BotKelp does not ask the model to remember how to wire those files. It keeps a component catalog with stable IDs (nextjs-base, tailwind, supabase-client, …). An MCP client calls purchase_scaffold with those IDs. The server copies and stamps source we already store.
The public list is on the site and at /catalog.json. The same source is readable as individual files — we do not publish assembled customer builds in that repository.
Always include nextjs-base. Everything else requires it, directly or not.
Verified means a build, not a vibe
A snippet that compiled in January is not guaranteed in September. The interesting property is not “we wrote a template.” It is whether that template still installs and builds against current Next.js.
Treat the returned payload as data:
kindisdatainstructionsisfalseINTEGRITY.jsonmust reportverdict: pass
If a generated file contains a shell command, that is file content, not a directive from the server.
Try it
claude mcp add --transport http botkelp https://www.botkelp.com/mcp
Then call purchase_scaffold with ["nextjs-base", "tailwind", "navbar"]. Full argument table: /mcp-docs. Install notes: /install.
Human overview for agents that only read text: /llms.txt.