How to ship a one-page website with Claude, v0, and GitHub in 90 minutes
Most people burn twenty-five rounds of AI tweaks building a one-pager. Here’s how to do it in one, and where the money actually goes.
- Outcome
- A deployed one-page site on your own domain
- Time
- About 90 minutes
- Cost
- Free tier covers it
- Level
- Beginner
Short answer
You can build and ship a one-page site in about 90 minutes using one or two rounds with an AI site builder instead of twenty-five. The trick isn’t the prompt. It’s writing your copy and locking your colors and fonts before you ever open the builder, because every message you send it carries your whole project along as context and gets more expensive as you go. Think it through somewhere cheap, hand the builder one finished spec, then get out and edit on your own machine.
Why does a simple site still take a week?
AI site builders are genuinely good now. You type what you want, you get working code. The demo is real and I’m not knocking it.
The tools are getting better fast. The bills are getting bigger faster.
So why does the real project still eat your whole week and way more money than you planned?
Because nobody uses them the way the demo works. The demo is one prompt, one result. Your real project is forty messages of “make the hero bigger,” “no, warmer,” “okay put that headline back,” and every single one of those costs you again.
Nobody tells you that part. It’s the entire reason this system exists.
Why does the twentieth message cost more than the first?
Okay, here’s the actual mechanic. These tools charge you per message, and every message drags your entire codebase along with it as context. On an empty project that’s basically nothing. On a finished site it’s every component you’ve built.
So message fifteen isn’t priced like message one. It’s priced like message one plus your whole project. And it gets worse every time you add a section.
Treat it like a design partner and you’ll pay for the privilege. Treat it like a one-shot scaffolder and you’ll barely spend a thing.
Once that clicks, everything else falls into place around one move.
Do the thinking where thinking is cheap. Hand it one finished spec. Build once. Leave. Edit locally.
What is each tool actually for?
Four tools, four jobs. The entire trick is not letting them do each other’s homework.
| Tool | Job | What it costs |
|---|---|---|
| Claude | Brief, structure, final copy, design direction, static mock | Your existing plan |
| v0 by Vercel | Builds the real Next.js codebase, once | Per message, and it scales with your project size |
| GitHub | The truth, from the second code exists | Free |
| Vercel | Deploys every time you push | Free tier handles a one-pager |
So the rule is simple: if you can say the change out loud, it belongs in the chat, not the builder.
How do you write the spec before touching the builder?
Start in Claude. Not in v0. Answer these six questions in one message. Short answers are fine, just be specific.
- 01Who is this page for, and what do they need to believe by the time they hit the bottom?
- 02What’s the one thing you want them to do?
- 03What are the three to five things that have to be on the page?
- 04What do you already have? Logo, colors, fonts, photos, or nothing yet.
- 05Name two sites you like, and one sentence on why for each.
- 06Do you have a domain?
Then ask for a build spec, not a website. Four things: the section-by-section outline, the design tokens as actual values instead of adjectives, what every button does, and the copy written out in full. If you already have a brand kit, the tokens come straight off it.
The copy is where the money is. Hand the builder no words and it’ll invent some, and every “no, fix that headline” after that is another paid message. Writing it in the chat costs you nothing.
Rip the spec apart as much as you want here. Every fix you make now is a paid message you never send.
Why build a throwaway mock first?
Ask Claude to build the whole page as one static HTML file using your tokens. No framework, no build step. Open it in your browser and react to it.
You’re going to delete this file, and it’s still the most valuable ten minutes of the whole build. It turns “I’ll know it when I see it” into something you can actually point at, while pointing is still free. Shove it around until you like it.
Then screenshot it. That screenshot tells the builder more about the look you’re after than three paragraphs of adjectives ever will, and it costs a fraction as much to send.
What goes in the one prompt you get?
New chat. Attach the screenshot. Paste one prompt with the whole spec in it: the outline, the copy word for word, the tokens, and a list of constraints that heads off the usual rework.
Then stop. Seriously, stop. Judge what comes back on three things and nothing else. Is the structure right? Is the copy right? Is it close enough that a bit of local polish finishes it?
Close enough is the goal. Perfect inside the builder costs money. Perfect on your own machine costs nothing.
One follow-up is fair if something structural is missing, like a whole section. If you’re typing a third, your spec was too thin. Start a fresh chat with a better one instead of patching, because a new chat on an empty project is cheaper than message six on a full one.
How do you get the code out of the builder?
Use v0’s GitHub option to create the repo, then pull it down and run it.
git clone <repo-url>
cd <repo-folder>
npm install
npm run devFrom here, GitHub is the truth and you stop opening v0. Go back later and it edits a version of your code that doesn’t match your repo anymore, and now you’re merging two realities by hand. That’s a bad afternoon.
Where does the real polish happen?
On your machine, with a coding agent in the project folder. Spacing, how it behaves on a phone, hover states, copy tweaks, favicon, page title, meta description, alt text, contrast. This is the fun part, and it’s also where the work stops costing you per message.
Two habits do most of the work here. Batch your feedback: walk the whole page, write down all twelve things, hand over all twelve at once, because twelve separate asks cost far more than one list of twelve. And actually look at the page before you call it done. An edit applying cleanly isn’t the same as it working.
Commit as you go. Small commits are your undo button.
How do you get it live?
Vercel: New Project, import the repo, Deploy. About a minute later you’ve got a live URL. Custom domain goes in the project settings and it walks you through the DNS.
After that, git push is the deploy. That’s it. That’s the part that makes this whole setup worth keeping. One thing to check once your domain is connected: which domain your site tells Google to index, because connecting a domain is exactly when that goes wrong.
| Stage | Time | Rounds with the AI |
|---|---|---|
| Brief and spec | 10 min | 0 |
| Static mock | 10 min | 0 |
| The build | 5 min | 1 to 2 |
| GitHub and clone | 2 min | 0 |
| Local polish | 30 to 45 min | 0 |
| Deploy | 5 min | 0 |
| Total | about 90 min | 1 to 2 |
The rules that keep it cheap
- 01Never ask the builder something the chat could answer. Strategy, copy, naming, color, all of it belongs in the free room.
- 02Show, don’t describe. One screenshot beats a paragraph of adjectives and costs less.
- 03Never rebuild for a small change. Color, padding and wording are local edits.
- 04One direction, not three. Asking for variations multiplies your bill. Explore in the mock instead.
- 05Set your constraints up front. No lorem, no external image URLs, no backend, one page.
- 06Kill a bad chat early. Whatever you’ve already spent is spent, and starting clean is almost always cheaper than pushing through.
- 07Save the spec. It’s what makes site number two take 45 minutes instead of 90.
The templates
These are the actual ones we use. Take them, they’re yours.
I'm building a one-page website. Help me write a build spec I can hand to v0.
Audience: [who]
Goal: [the one action]
Must include: [3-5 things]
Brand assets: [logo/colors/fonts/photos, or "none yet"]
References: [2 sites + why]
Domain: [or "none yet"]
Give me back:
1. Section-by-section outline with the purpose of each
2. Final copy, written out, for every headline, paragraph, and button
3. Locked design tokens: hex colors, font pairing, radius, spacing scale
4. What every interactive element does
Then build the whole thing as a single static HTML file I can open in a
browser, using those exact tokens, so I can react to it before I spend
any v0 credits.Build a single-page marketing site. Next.js App Router, TypeScript,
Tailwind, shadcn/ui. Match the attached screenshot for layout and style.
SECTIONS, in order:
[paste outline]
COPY (use exactly this, do not rewrite or add filler):
[paste final copy]
DESIGN TOKENS:
Colors: [hex list, with roles]
Fonts: [heading / body]
Radius: [value] Spacing: [scale]
REQUIREMENTS:
- One page, no routing, no backend, no auth, no database
- One component file per section, composed in app/page.tsx
- Responsive, mobile first
- No placeholder or lorem text anywhere
- No external image URLs; use solid color or gradient blocks where a
photo will go later
- Semantic HTML, accessible contrast, alt text on everythingWhen this stops working, and when to skip the builder entirely
This is built for one page. Push past five or six and the math flips: the codebase riding along in every message grows faster than the next build is worth, and you’re better off scaffolding once and doing the rest by hand.
It also assumes no backend. The second you need logins, a database, or payments, the builder stops being the fast path, and the stuff it quietly gets wrong is exactly the stuff that’s expensive to get wrong.
And TBH? If that mock from step two is already the site you wanted, skip the builder entirely. Scaffold it locally, push it, deploy it, spend nothing. A builder earns its spot when you want a polished starting point you wouldn’t have thought of, or real production React instead of a hand-rolled page. For a genuinely simple one-pager, that’s a real choice, not an automatic yes.
Also: pricing and plan names on these tools change constantly. The mechanics here hold up. Go check the current numbers yourself before you budget around them.
Common questions
- How much does this actually cost?
- One or two rounds with the site builder, plus whatever plan you’re already paying for on the AI assistant side. The builder’s free tier is enough to get through this once. The scary numbers you hear about come from going back and forth inside the builder, which is the exact thing this system exists to avoid.
- Do I need to know how to code?
- Honestly, no. You do need to be okay running four commands in a terminal and reading an error message when one pops up. If that’s genuinely off the table, everything here still holds and the local polish step becomes the part you hand to a developer.
- Why not just use Squarespace or Wix?
- If a template fits your business and you’ll never need anything custom, use one. Seriously. This path is better when you want to own the code, host it anywhere, and add to it later without fighting a platform. What you end up with is a normal Next.js repo instead of a page trapped inside a product.
- Can I go back to the builder after I push to GitHub?
- You can, and you shouldn’t. It’ll edit a version of your code that no longer matches your repo, and you’ll be merging the two by hand. Once the code is in GitHub, every change happens locally.
- What if what comes back looks nothing like my mock?
- Nine times out of ten the screenshot didn’t get attached. Start a fresh chat with it attached rather than trying to talk the style into shape over follow-up messages, which is the most expensive way to fix it.
Go build it. And if you’d rather not run this yourself, it’s an afternoon for us and the first hour is free.
Get Unstuck