off your laptop. onto the internet.
Until now, your site has only lived at localhost:3000, an address that works on your computer and nowhere else. This step gives it a real address anyone can open. Vercel does the work: it watches your repository on GitHub, builds your site whenever the code changes, and serves it to the world. You set it up once, and from then on, publishing is a push.
| On your computer | On the internet |
|---|---|
| localhost:3000 | your-site.vercel.app (your own domain in the next step) |
| Your keys in .env | The same keys in Vercel's Environment Variables |
| npm run dev | Vercel builds and runs it for you after every push |

✓ Success: your site has a real address.
this is a work in progress
1️⃣ Connect Your Repository
Go to vercel.com and sign up with Continue with GitHub, using the same GitHub account that holds your copy. Signing in through GitHub is what lets Vercel see your repository and rebuild it when it changes.
Vercel asks you to pick a plan. The free Hobby plan is for personal, non-commercial projects. If your site is for a business or makes money, Vercel's terms call for Pro. Compare them at vercel.com/pricing, and choose knowing what your site is for.
- In your Vercel dashboard, click Add New… and choose Project
- Find your repository under Import Git Repository and click Import
- Not in the list? Your repository is private, so Vercel needs permission first. Click Adjust GitHub App Permissions, choose Only select repositories, pick yours, and save
- On the next screen, leave the settings as they are: Vercel recognizes Next.js and uses your copy's own build command
- Do not click Deploy yet. Your site needs its keys first
2️⃣ Give Vercel Your Keys
Your .env file never leaves your computer, so Vercel has never seen your keys. You give them to it directly. First, one new key. Your site runs five small jobs once a day, like clearing out visitor data older than 30 days. Vercel starts each job and sends a password along with it, so your site knows the request really came from Vercel. That password is CRON_SECRET, and you make it yourself:
# Prints a long random password (works on Mac and Windows)
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"# .env (below FOUNDER_USER_ID)
CRON_SECRET="the-long-random-string-it-printed"Now hand all of them to Vercel at once. Back on the import screen:
- Open the Environment Variables section
- Open .env in your editor, select everything, and copy it
- Click into the first Key box and paste. Vercel splits the file into one row per key
- Check each value: no quote marks around it, no spaces at either end
| Key | From which step |
|---|---|
| DATABASE_URL | Create your database (the one with -pooler) |
| DIRECT_DATABASE_URL | Create your database |
| NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY | Add sign-in |
| CLERK_SECRET_KEY | Add sign-in |
| FOUNDER_USER_ID | Make yourself admin |
| CRON_SECRET | This step |
Those six are everything your site needs right now. Later steps add more, like payments and email, and each one goes in both places: .env and Vercel.
3️⃣ Deploy and Check It Live
Click Deploy. Vercel copies your code, runs the same build your copy was tested with, and publishes the result. The first build takes a few minutes. The log scrolls a lot, and two lines in it look like problems but are not: Swift not available, using pre-generated colors and ffprobe not available, using pre-generated video metadata. Your copy ships with those files already made.
When Vercel celebrates, open your new address (it ends in .vercel.app) and walk it the way you did in First run:
- The homepage opens, at an address anyone can visit
- Sign in with your usual account. Your computer and your live site share the same sign-in and the same database, so you are already admin
- /admin/steps shows Deploy among your SETUP. steps
- In Vercel, open your project's Settings. Under Cron Jobs, all five jobs are listed. Click Run next to /api/cron/db-cleanup, then check Logs: it should answer without Unauthorized
- Under Build and Deployment, Node.js Version says 24.x, the same version as your computer
“Same code, same database, same you. Now with an address.”
— unparty-app
⚠️ What Changes Now
- Pushing to main publishes — every time you push to your main branch in GitHub Desktop, Vercel rebuilds and your live site updates within minutes. Anything you push is live
- Other branches get a preview — push a different branch and Vercel gives it its own private test address, leaving your live site alone
- Changing a key needs a redeploy — edit a value in Vercel's Environment Variables, then open Deployments, click ⋯ on the newest one, and choose Redeploy
- One database, two sites — your computer and your live site read and write the same database. Delete a step on localhost and it is gone from the live site too
- Sign-in says Development mode — you are still using Clerk's development keys. That is fine for now. The domain step switches you to production keys
🧯 If the Build Fails
- Environment variable not found: DATABASE_URL — a key is missing or misnamed in Vercel. Add it under Settings → Environment Variables, then redeploy
- Missing publishableKey, or any error that names Clerk — the two Clerk keys are missing or swapped. The one starting pk_ is the publishable key
- The site builds but pages say they cannot reach the database — a value probably kept its quote marks or picked up a space. Edit it, then redeploy
- A cron job answers Unauthorized — CRON_SECRET is missing in Vercel, or you changed it without redeploying
🤖 Ask Your LLM
My Next.js site failed to build on Vercel. Here is the end of the
build log: [paste the last 40 lines]. What went wrong, in plain
words, and what should I change in Vercel? Do not ask me for my keys.
Read vercel.json and the files in src/app/api/cron/ in this project.
Explain in plain words what each scheduled job does and what
happens if CRON_SECRET is missing.✅ You Are Done When
- Your project in Vercel is connected to your repository and its latest deployment says Ready
- Vercel has all six keys, including a CRON_SECRET that also sits in .env
- Your .vercel.app address opens, you can sign in, and /admin/steps shows your SETUP. steps
- db-cleanup runs from the Cron Jobs page without Unauthorized
Your site is live. Next is Your domain: trading .vercel.app for an address that is yours, and switching sign-in to production keys.
“Built on your computer. Running for everyone.”
— unparty-app