S
supabase::deploy
← Back to DeployerGitHub

Self-Hosting SupaFast

SupaFast is a Next.js app that runs entirely in the browser — there is no backend, no database, no server state. All secrets are generated client-side. You can fork it, self-host it on Vercel, Netlify, or any static host, and it will work identically.

Prerequisites

• Node.js 18+ and npm
• Git
• A Vercel / Netlify account — or any host that supports Next.js static export
• (Optional) A custom domain

Quick Deploy — Vercel (Recommended)

1
Fork the repo
Go to github.com/nadercas/supafast and click Fork. This gives you your own copy to deploy from.
2
Import to Vercel
Go to vercel.com/new, click Import Git Repository, and select your fork. Vercel auto-detects Next.js — no configuration needed.
3
Deploy
Click Deploy. Done. Vercel gives you a *.vercel.app URL immediately. You can add a custom domain in project settings.
Note: No environment variables are required. The app has zero server-side dependencies.

Run Locally

git clone https://github.com/nadercas/supafast.git
cd supafast
npm install
npm run dev

Open http://localhost:3000. The deployer is fully functional locally — it calls the Hetzner API directly from your browser.

Deploy to Netlify

1
Fork the repo
Fork github.com/nadercas/supafast to your GitHub account.
2
Connect to Netlify
Go to app.netlify.comAdd new site → Import an existing project → select your fork.
3
Configure build settings
Netlify should auto-detect these. If not, set manually:
Build command:  npm run build
Publish directory: .next
4
Deploy
Click Deploy site. Netlify gives you a *.netlify.app URL.

Self-Host on a VPS (Docker)

If you want to run it on your own server rather than a managed platform:

# Clone your fork
git clone https://github.com/YOUR_USERNAME/supafast.git
cd supafast

# Build
npm install
npm run build

# Run with Node
npm start
# Now serving on http://localhost:3000

# Or run with PM2 for persistence
npm install -g pm2
pm2 start npm --name supafast -- start
pm2 save

Put Nginx or Caddy in front for HTTPS. Example Caddyfile:

yourdomain.com {
    reverse_proxy localhost:3000
}

Customization

The two files you'll most likely want to edit:
components/SupabaseDeployer.jsx
Main UI — wizard steps, styling, server type catalog, Hetzner API client
components/cloudInitGenerator.js
The cloud-init bash script that runs on the server at first boot — backup, Authelia, Caddy, MCP, etc.
management/server.js
Management panel backend (Node.js) — runs inside a Docker container on your deployed server
management/public/index.html
Management panel frontend — dashboard, backup status, logs, restore instructions

Architecture

SupaFast has a zero-backend architecture. Here's the complete data flow:

Browser (your machine)
  │
  ├── Generates all secrets via Web Crypto API (never leaves browser)
  ├── Calls api.hetzner.cloud directly (your token, your API, no proxy)
  ├── Generates a cloud-init bash script (all secrets embedded)
  └── Passes cloud-init as user_data when creating the Hetzner server
                              │
                              ▼
              Hetzner Server (first boot)
                              │
              cloud-init runs the bash script:
              ├── Phase 1: OS hardening
              ├── Phase 2: Supabase docker stack
              ├── Phase 3: Restic backups to S3
              ├── Phase 4: Management dashboard container
              └── Phase 5: MCP server (Claude/Cursor integration)
Note: SupaFast itself never sees your Hetzner token, Supabase secrets, or S3 credentials. All API calls are visible in your browser's Network tab.

Keeping Up to Date

If you forked the repo and want to pull upstream changes:

# Add the upstream remote (one-time)
git remote add upstream https://github.com/nadercas/supafast.git

# Pull updates
git fetch upstream
git merge upstream/main

# Redeploy (Vercel/Netlify auto-deploys on push to main)
git push origin main
MIT License · github.com/nadercas/supafast
Launch Deployer →