Netlify
Like Vercel, but the theme needs one config change first.
Netlify builds and hosts the site from a Git repository, with HTTPS and a domain included.
Netlify needs one edit to the theme before it will build at all. Do step 1 first — skipping it produces a failed build or a site where every page is "Page not found".
It is the only per-host code change in these docs.
Like Vercel, Netlify gives your site no permanent disk — which no longer matters, because your content and uploads live in Supabase.
1. Remove the standalone output
The theme builds in Next.js standalone mode, which suits Docker and self-hosting. Netlify's Next.js runtime is incompatible with it.
Open next.config.ts and change this line:
const nextConfig: NextConfig = {
output: "standalone",
output: process.env.NETLIFY ? undefined : "standalone",
images: {Netlify sets the NETLIFY environment variable during its builds, so this keeps
every other deployment route working exactly as before. If you will only ever deploy
to Netlify, you can delete the output line instead.
2. Seed Supabase, once
From your own computer, with DATABASE_URI pointed at your Supabase project:
bun run seedSkip this if you already did it in Install and seed.
3. Push to GitHub
git init
git add .
git commit -m "Initial commit"
git branch -M main
git remote add origin https://github.com/YOUR_USERNAME/YOUR_REPO.git
git push -u origin mainUse a private repository. Check git status first to be sure .env.local is not
included.
4. Deploy
Import the site
In Netlify: Add new site → Import an existing project, connect GitHub, choose your repository.
Netlify detects Next.js and installs its Next.js runtime automatically. Leave the
build command as npm run build and the publish directory as .next.
Add environment variables
Site configuration → Environment variables. Add all of these before the first build:
| Name | Value |
|---|---|
TEBEX_TOKEN | Your Headless store token |
SERVER_SECRET | Your game server secret |
PAYLOAD_SECRET | 64 random hex characters |
NEXT_PUBLIC_SITE_URL | Your final domain |
DATABASE_URI | Supabase Session pooler string |
SUPABASE_URL | https://yourref.supabase.co |
SUPABASE_SERVICE_ROLE_KEY | Your service_role key |
Make sure each is available to Builds as well as Functions. In Netlify a
variable can be scoped to functions only, and the build itself reads
PAYLOAD_SECRET, DATABASE_URI and SUPABASE_URL.
Deploy
Trigger the deploy and wait. First builds take three to five minutes.
Add your domain
Domain management → Add a domain, follow the DNS instructions. HTTPS is issued automatically.
Then correct NEXT_PUBLIC_SITE_URL if you guessed it earlier, and redeploy —
environment changes only apply to new builds.
Log in and change the admin password
https://yourdomain.com/admin.
Everyday operations
Push to main and Netlify rebuilds. Your content and uploads sit in Supabase, so
redeploys never touch them.