VibeHost

Deploy client sites

Give each client a private URL, a custom domain, and access that expires on its own.

You're delivering a landing page, or any small site, to a client. The site is built, and you need it live under a clean URL by tomorrow morning without sharing your dev environment.

Prerequisites

  • A built static site in a directory (./dist, ./build, ...).
  • The CLI installed and signed in.
  • Optionally, a custom domain and access to its DNS. The free tier works for review-only URLs, and the Business plan adds custom domains.

1. Create an app per client

One app per client keeps URLs clean and keeps each client's access separate:

vibehost app create acme-landing
vibehost link --app acme-landing
vibehost deploy ./dist

The URL is https://acme-landing-yourws.vibehost.space. That's clean enough for an internal review. For the final delivery, add a custom domain in step 3.

2. Lock down access

Don't make work in progress public. There are two ways to share it:

This suits repeated review cycles, because you can see who opened the URL and when.

vibehost app visibility acme-landing private
vibehost app grants add-email sarah@acmecorp.com viewer --app acme-landing
vibehost app grants add-email tom@acmecorp.com viewer --app acme-landing

A visitor who opens the URL is sent to vibehost.com/login to sign in with Google or email, and then sees the site. Later visits skip the sign-in because of the session cookie.

3. Add a custom domain

This step is optional, but most clients expect it.

vibehost domain add www.acmecorp.com --app acme-landing

The CLI prints the DNS record to add. Set it at the client's DNS provider, or at yours if you're hosting. After DNS propagates, which takes about 5 to 15 minutes for a first record, verify the domain:

vibehost domain verify www.acmecorp.com --app acme-landing

vibehost domain list shows the hostname as pending until it verifies, then verified. Once DNS is in place, that usually takes under 5 minutes.

For apex domains (acmecorp.com without www), see the apex domain section.

4. Iterate

The client asks, "can you make the headline bigger and the CTA red?" You make the change locally and deploy:

vibehost deploy

The URL stays the same, so the client refreshes and sees the new version. The previous deployment isn't deleted, which helps when the client wants to go back.

Or roll back to the previous deploy:

vibehost rollback --app acme-landing

5. Wrap up

Once the client signs off, you can hand the site over or keep hosting it:

If the client wants to own the deployment from now on, move it to their workspace:

  1. Create a workspace in the client's name (have them sign up at vibehost.com).
  2. They invite you to it temporarily.
  3. You re-deploy under their workspace:
    vibehost --workspace acme app create acme-landing
    vibehost --workspace acme deploy ./dist
  4. They take over the custom domain by running domain add again under their workspace and verifying it again.
  5. You remove yourself from their workspace.

There's no in-place "transfer app" yet. It's planned, and until then this manual flow works.

Keep the app in your workspace and bill the client a hosting retainer.

One workspace covers all your client projects, so you don't pay $20 per client. The Business plan price is per workspace, not per app.

Auto-revoke the client's share link after the post-launch review period:

vibehost app share-link ls --app acme-landing
vibehost app share-link revoke <id> --app acme-landing

Pattern: many small client sites

A sales team might run dozens of proposal apps (acme-proposal-site, globex-pitch-v2, initech-proposal, ...). Each one is a page branded for one client and one meeting.

For each pitch, run:

vibehost app create acme-pitch
vibehost deploy ./dist --app acme-pitch
vibehost app share-link create --app acme-pitch --expires-in 14d --label "Acme pitch — Mar 2026"

After the pitch, revoke the share link:

vibehost app share-link revoke <id> --app acme-pitch

Optionally keep the app for portfolio reference, or delete it outright with vibehost app delete acme-pitch --force.

The free tier allows 100 apps per workspace, which is enough for most agencies.

See also

On this page