This whole site is the output of three tools in sequence. I thought it through with Claude until the idea was sharp — what it is, who it's for, the pages, the data. I designed it with Claude Design, turning that thinking into a real interactive prototype and design system. Then I built and shipped it with Claude Code — Next.js, Supabase, Resend, live on Vercel with a custom domain. No full-stack background. The surprising part: the thinking took the most time; the build was an afternoon.
Who this is for
Run this if you have an idea for a real product or site — not just a page — and you want to take it all the way to live, using AI at each stage instead of hiring out the thinking, the design, and the code separately. You don't need to be a developer. You do need to be willing to make decisions and to debug in the open.
What you'll need
- A Claude account (for scoping and for Claude Code) and access to Claude Design.
- Free accounts you'll add during the build: GitHub, Vercel, Supabase, Resend.
- A domain if you want a custom URL (optional — you can launch on a free
*.vercel.appfirst).
Total cost: $0 to start, plus ~$10/yr for a domain.
Think the whole thing through with Claude · several sessions
This was the highest-leverage part, and the one that's tempting to skip. Before any design or code, I used Claude as a thinking partner to get the idea sharp: what is this, who is it for, what are the pages, what's the data behind them, and what makes it worth existing. Treat it like a sharp collaborator — bring your messy notes, then push back on the first answers until it's genuinely clear.
I want to think through a product idea with you before I design or build anything. Here's my rough concept and notes: [paste everything]. Help me get it sharp: 1. In one sentence, what is this and who is it really for? 2. What are the core pages/screens, and what is each one's single job? 3. What's the underlying data model — the objects and their fields? 4. What's in scope for v1 vs. explicitly not? 5. Push back: what's unclear, over-scoped, or trying to do too much? Ask me questions before answering. I want to leave this with a spec I could hand to a designer.
You'll know you're done when you could explain the product in a sentence and list its pages and data without hesitating.
Turn the thinking into a design with Claude Design · several sessions
Take the sharpened concept — the positioning, the pages, the data, and real copy (not Lorem Ipsum) — into Claude Design and let it produce an actual interactive prototype and design system: colors, type, spacing, components, all the screens. Then iterate by talking: "more restrained," "make this section feel like a story, not a form," "tighten the hierarchy." Stop when it looks like you, not a template.
The output of this stage is your spec for the build — a design that already answers the layout, copy, and interaction questions, so the code stage is about faithfully rebuilding, not inventing.
Hand the design to Claude Code · 15 min
Give Claude Code the design as the source of truth and ask for a plan before any code — stack, structure, data model, and the risky parts — so you build in the right order.
Here's my design handoff / prototype [paste or attach files]. I want to rebuild it as a real production web app. Before writing code: 1. Propose a stack and project structure. 2. Restate the data model and the routes you see. 3. List what has to be a real backend vs. what can be static. 4. Call out the riskiest/most ambiguous parts and ask me about them. Then we'll build it in that order, starting with the data model.
Scaffold it data-model-first · 30 min
Have Claude Code stand up the project and the data model before the pretty parts — everything downstream depends on the shape of your data. Keep editable content (copy, entries) in files or a simple data layer so you can change words without touching components.
Put the backend behind one interface · 45 min
The trick that made deployment painless: don't wire the database in directly. Have Claude Code define a small storage interface with two implementations — a local file/in-memory one for development, and the real database for production — picked automatically based on whether production credentials are set.
Add persistence behind a single interface (a Store) so I can swap implementations without touching the app: - A local dev implementation (file or in-memory) so the app runs with zero setup. - A production implementation backed by Supabase (Postgres). - Select automatically: use Supabase when its env vars are present, else the local store. Then write the SQL schema for the tables, and keep all secret keys server-side only.
The payoff: the whole app runs locally with no accounts, and going live is just adding environment variables.
Add login and email · 30 min
For an admin area or signups: Supabase Auth for login, Resend for email. Two specifics that save an hour:
- For admin login, use a typed email code, not a magic link — email scanners "click" links to preview them and burn the one-time token (you'll see
otp_expired). A code you type can't be pre-clicked. - Point Supabase's own auth emails at Resend via custom SMTP, so you send from your domain and skip the built-in email rate limits.
Push to GitHub, deploy on Vercel · 20 min
Publish the repo to GitHub (GitHub Desktop is the no-friction way), then import it into Vercel, add your environment variables, and deploy. Vercel auto-deploys on every future push, so shipping a change becomes "commit and push."
Point your domain · 30 min
In Vercel, add your domain, then create the DNS records it shows you at your registrar (an apex A + www CNAME, or switch nameservers to Vercel's). Delete any leftover "parking" records so they don't fight the new ones. Wait for the certificate, and you're live on your own URL.
Debug in the open · ongoing
The first deploy rarely works, and that's fine — the errors are the workflow. Paste each one back to Claude Code and fix it. The recurring lesson: make the build resilient (never let a live-data read crash a static build) and read errors literally — half of mine were a missing https:// or a variable that needed a redeploy.
Rushing past the thinking. The scoping sessions with Claude were the highest-leverage part of the whole thing. A sharp concept makes the design and the build fast; a fuzzy one makes you rebuild. Don't skip to design or code because it feels like progress.
Env vars don't apply retroactively. Adding variables in your host doesn't change the build that already ran — you must redeploy. And NEXT_PUBLIC_* values are baked in at build time, so they need a fresh build.
URLs need the scheme. A site URL of yoursite.com will crash the build; it must be https://yoursite.com.
Magic links get eaten by email scanners. Forwarded/scanned inboxes pre-open the link and consume the one-time token. Use a typed code for login instead.
Auth email hits rate limits. The database's built-in email sender allows only a handful per hour. Wire your ESP (Resend) as custom SMTP and the limit lifts.
Leftover DNS parking records. If your domain still has its old parking record next to the new one, traffic round-robins and half your requests hang. Delete the old one.
Do this next
- Log the workflow you just did — like this entry. If the recipe is repeatable, write it up while it's fresh.
- Turn on preview deploys so every branch gets its own URL before it goes live.
- Test from your phone — the first mobile visit always finds something the desktop didn't.