Cubed Docs
Deployment

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:

next.config.ts
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 seed

Skip 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 main

Use 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:

NameValue
TEBEX_TOKENYour Headless store token
SERVER_SECRETYour game server secret
PAYLOAD_SECRET64 random hex characters
NEXT_PUBLIC_SITE_URLYour final domain
DATABASE_URISupabase Session pooler string
SUPABASE_URLhttps://yourref.supabase.co
SUPABASE_SERVICE_ROLE_KEYYour 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.

Troubleshooting

On this page