Deployment Kickstart takes the app you've been running locally and puts it online. It creates a private GitHub repository for your code, a Vercel project that hosts it, and live versions of your email and billing settings. When it finishes, you get a public address for your app.
Start when sign-up and sign-in work in your local app. You'll add a few more keys to the same .env, run two commands, then test the live app.
What this workflow does
| Kickstart creates | Details |
|---|---|
| Private GitHub repository | Owned by your GitHub account. It contains your current source code, without the starter's Git history. |
| Vercel project | Connected to that repository and configured with only the settings your app needs to run. |
| Live billing | Copies your Stripe test products and prices into live mode and sets up the live webhook and billing portal. |
| Production address | A vercel.app address by default, or your own domain. Sign-in, emails and integrations switch to it. |
Deployment doesn't push anything to the Ship & Scale repository or change your local folder's Git history. Your local folder stays as it is; after deployment, you'll continue working from a clone of the new repository.
Finish local setup first
Check your local app
Complete Kickstart and confirm you can sign up, sign in and reach your dashboard locally. Keep .env, .kickstart and .secrets in your project folder; deployment uses the settings Kickstart saved there.
Prepare the deployment accounts
Follow each guide, then return here:
| Requirement | Guide | Why you need it |
|---|---|---|
| GitHub access token | GitHub | Creates your private repository and uploads your code |
| Vercel access token and GitHub connection | Vercel | Creates the hosting project and lets Vercel read your code |
| Verified sending domain | Resend | Lets your app email any customer, not only you |
| Stripe live secret key | Stripe | Needed when billing is enabled |
All of these work on free plans. Vercel's Hobby plan is for non-commercial use, so move to Pro before you take payments. You'll need a domain for the email sender; if you don't have one yet, buy it from any domain registrar.
Add the deployment values
Open the same .env and add these values, keeping everything that's already there:
GITHUB_TOKEN=replace_with_your_github_token
VERCEL_TOKEN=replace_with_your_vercel_token
STRIPE_LIVE_SECRET_KEY=sk_live_REPLACE_WITH_YOUR_KEY
RESEND_FROM_EMAIL=noreply@your-verified-domain.example
RESEND_TEST_MODE=falseUse an address under your verified domain for RESEND_FROM_EMAIL. Keep STRIPE_TEST_SECRET_KEY on its own line. Deployment copies your Stripe test products and prices into live mode, so check their names and amounts in your Stripe sandbox first. If your contact form should reach a specific inbox, set CONTACT_TO_EMAIL as well.
Leave GITHUB_OWNER, GITHUB_REPO_NAME, GITHUB_REPO_ID, the VERCEL_* IDs and APP_URL_LIVE blank. Kickstart finds your GitHub account and Vercel team, names the repository and project after APP_NAME, and fills these in.
Choose your address
By default, your app gets a free address such as your-app.vercel.app. You can switch to your own domain at this point, but decide before your first deployment: changing the address after launch is a manual process, because sign-in and email links depend on it.
To use your own domain, follow Use your own domain below before running the commands.
Check, then deploy
Run the read-only check
npm run kickstart:deploy -- --checkThis checks your tokens, accounts, repository access and settings without creating anything. Fix every reported failure before continuing. A passing check confirms access; it can't guarantee that every later step will succeed.
Deploy
This command changes your live accounts
Deployment creates a GitHub repository, a Vercel project and live Stripe products. It also switches your shared Supabase sign-in and email settings to the production address. Check that you're using the intended accounts before running it.
npm run kickstart:deployIf you can access several Vercel teams, the terminal asks which one to use. Leave the terminal open while it runs. Kickstart saves IDs to .env as it creates each resource, so a rerun continues where it stopped.
If Vercel can only access selected repositories, Kickstart pauses after creating your repository and shows a link. Open it, add the new repository to the Vercel GitHub App, then run the same command again.
When deployment finishes, Kickstart checks that your home page and login page load over HTTPS and prints your app's address.
Test your live app
Open the address Kickstart printed and check the main customer flows:
- Sign up with an email address, complete or skip onboarding and confirm you land in your own workspace.
- Sign out, then sign in again.
- Request a password reset and confirm the email arrives from your domain.
- Invite a second email address to your workspace and accept the invitation.
- If billing is enabled, follow the subscription checks before opening sales.
The deployment check confirms the site is online. These steps confirm your customers can actually use it.
Switch to your new repository
From now on, work in a clone of the repository Kickstart created, not the starter folder:
- Clone the new repository from GitHub into a new folder.
- Copy your
.envfile from the starter folder into the new folder. Git doesn't include it, and your app needs it to run locally. - Run
npm ci, thennpm run devto confirm the app starts.
Keep the original starter folder with its .kickstart and .secrets files. They record what Kickstart created and you'll need them if you ever rerun or recover deployment. Back them up somewhere private, such as an encrypted drive or password manager.
To release a change, commit it in your new repository and push to main. Vercel builds and deploys each push automatically.
Use your own domain
Set this up before your first deployment:
- Set
APP_URL_LIVEin.envto your domain's HTTPS address, such ashttps://app.your-domain.com, without a path. - Run
npm run kickstart:deploy. Kickstart creates the Vercel project and adds your domain to it, then stops because the domain isn't connected yet. Sign-in settings haven't changed at this point. - In Vercel, open your project's Settings → Domains. Add the DNS records it shows at your domain provider. See Vercel's domain guide.
- Wait until Vercel shows the domain as verified, then run
npm run kickstart:deployagain.
To change the domain after launch, follow Domains, updates and deployment recovery.
After deployment
Your local app and your live app share one Supabase project. After deployment, sign-in links, emails and connected integrations point to your live address, even when you're testing locally, and anything you create locally lands in the same database your customers use. Where your app runs explains this setup.
Don't rerun the local npm run kickstart after launch. It would try to switch sign-in back to your local address, which affects your live customers. If you really need that, read active and saved origins first.
Vercel preview deployments are turned off because they can't share your production sign-in settings.
You're finished when
- Your app loads at its live address and you can sign up, sign in and receive emails there.
- You're working from a clone of your new repository, with your
.envcopied into it. - The original starter folder, with
.kickstartand.secrets, is backed up privately.
Template 0.0.1 · September 2026 source snapshot