Handoff
Start free
For vibe coders & freelancers

Finish the site. Send one link. Get paid.

Handoff is the last step between a finished static build and a live client website. Upload your .html or .zip, send one link, and the client picks a domain and clicks Launch — without ever seeing DNS, hosting, or a deploy log. No more chasing them about “why isn’t it live yet.”

1Upload your static site (.zip or .html)
handoff.app/h/9f2a7c4e
2Client checks a domain
acmeroofing.com  ✓ available · $17/yr
Launch my website →
✓ acmeroofing.com is live

From your build to their live site

01

Upload a build

Zip your static site and upload it. We extract it, verify index.html, and stage it for launch — no build pipeline to configure, no Git push.

02

Send one link

Generate a handoff link and text it to your client. They open it on their phone. No account, no login, no dashboard they have to learn.

Or ship from your terminal

npx handoff-ship ./dist — upload and get a client link without opening a browser. API tokens + a GitHub Action for CI deploys are built in. Server code too: drop a _worker.js in your zip for contact forms and APIs.

03

They pick a domain

Live availability checked against the actual registry. They type a name, see whether it's free, and see the annual price — right there on the page.

04

One-click launch

They click Launch. We deploy, provision SSL, and return a live URL in under a minute. Cloudflare, DNS records, and deploy logs stay behind the curtain.

05

Changes without email

When the client needs an edit, they type it into the portal. It lands in your dashboard as a change request. Nothing gets lost in an inbox thread.

06

Recurring without servers

Charge a managed-plan fee on top of free hosting. You keep the recurring revenue; you never run a server or carry a hosting SLA.

Static sites only (for now)

Handoff delivers the frontend. If your project has a backend, host that part elsewhere — we’ll point the domain at it.

Static — a perfect fit

HTML, CSS, JS. Fast, secure, basically free to host.

  • Landing pages & marketing sites
  • Portfolios & brochures
  • Small-business sites
  • Static exports: Astro, Next.js export, SvelteKit, Webflow, Framer, plain HTML
Upload & launch

Dynamic — host the backend yourself

Logins, databases, real-time, real checkout.

  • WordPress, Shopify, custom Node/Python
  • Member areas, dashboards, SaaS apps
  • Host the backend on Railway, Fly.io, Vercel, or Supabase
  • Point the domain at it — we handle the DNS
Out of scope, by design

Built for vibe coders, solo devs, and small studios who ship in Webflow, Framer, Astro, Next.js, SvelteKit, or plain HTML — and hate the handoff meeting.

Simple, transparent pricing

No hidden fees. Cancel anytime.

Free

$0/mo
  • 2 free launches
  • Branded delivery page
  • Unlimited handoff links
  • Domain availability check
Start free

The client never pays Handoff anything — they just click Launch. Your $19.99/mo covers unlimited delivery, unbranded portals, and the change-request channel. Cancel anytime.

Questions, answered straight

No account for your client. No server for you. Here's how the pieces actually fit.

Do my clients need an account? +
No. A client opens the handoff link you send them, picks a domain, and clicks Launch. There is no sign-up, no dashboard, and no login. The link is the whole product surface.
Who owns the hosting? +
You do. The site deploys into your free Cloudflare account — you connect it once with a scoped API token. You keep the hosting and the relationship; the client owns their domain. They never see Cloudflare, DNS, or a deploy log. You charge a managed-plan fee for keeping it live — not for renting servers.
Do I need to know Cloudflare? +
Just enough to make one scoped API token — about 4 minutes, and the onboarding walks you through it. After that, Handoff drives everything: deploys, SSL, DNS, and optional domain registration. You don’t open the Cloudflare dashboard again unless you want to.
What about a site with a backend — logins, a database, real checkout? +
Handoff is for static frontends. If your project needs a server, build the frontend with Handoff and host the backend on Railway, Fly.io, Vercel, or Supabase — then point the domain at it. We handle the DNS; you keep the backend wherever it already runs.
Can I register a domain for a client on the spot? +
Yes. If a client has no domain, you can register one through your Cloudflare — opt in by adding Registrar:Edit to your token and setting up a payment method in your Cloudflare. It’s billed to your card, registered to the client, and auto-pointed, with a clear review-and-confirm step before any charge. Or skip all that and buy the domain anywhere you like (Namecheap, GoDaddy, Squarespace…) and just point it here.
What does it actually cost? +
Start free — two launches and unlimited handoff links, no card. When you’re shipping more, the Pro tab in your dashboard shows every plan and the price, and you subscribe there. The only other cost is a domain itself, and only if you buy it through Handoff: billed to your Cloudflare at the registrar’s cost, no markup, registered to the client. If your client already owns a domain, there’s nothing extra. No per-launch fee, and the client never pays Handoff anything.
What can I upload? +
Any static site — a single .html file, or HTML, CSS, JS, and assets in a .zip. If you build with a framework, export the static build first. We expect an index.html at the top.
How does payment work? +
You subscribe to a plan from the Pro tab in your dashboard via Stripe Checkout — billed to you, cancel anytime. Your client never sees a Handoff paywall: they just click Launch. Domain registration (if you use it) is a separate, clearly-confirmed charge on your Cloudflare card, registered to the client.