Home Getting Started Self-host Orange Way

Self-host Orange Way

Last updated on May 16, 2026

Self-host Orange Way

Orange Way is Apache 2.0. The hosted version at orangeway.app runs the same code as the public repo — there's no closed enterprise fork. This is the guide for running it on your own infrastructure.


Who self-hosts

  • Privacy maximalists who want zero ops trust.
  • Households that want to keep all data inside their own home network.
  • Developers building on top of Orange Way's API.
  • Cypherpunks for whom "open source" means "open source AND I run it."

Architecture in 30 seconds

Orange Way is a Vite SPA + a Supabase backend (Postgres + edge functions). It uses Orange Rails as its connector layer — you can either point at the hosted Orange Rails or run your own.

[ your browser ]
       ↓
[ your-self-host.example.com ]  ← static Vite SPA on Cloudflare Pages or any static host
       ↓ (Supabase JS SDK)
[ your Supabase project ]       ← Postgres + edge functions
       ↓ (X-Platform-API-Key)
[ Orange Rails ]                ← hosted (api.orangerails.com) or self-hosted
       ↓
[ Coinbase / Blink / Kraken / xpub / etc. ]

Quick start (Supabase Cloud path)

The fastest path. Free tier covers a household of 4 with plenty of room.

1. Fork the repo

gh repo fork MorningRevolution/orange-way --clone=true
cd orange-way

2. Create two Supabase projects

In the Supabase dashboard, create <yourname>-dev and <yourname>-prod. Note both project refs.

3. Apply migrations

supabase link --project-ref <your-dev-ref>
supabase db push

Repeat for prod.

4. Get an Orange Rails platform API key

  • Hosted Orange Rails (recommended for first try): sign up at orangerails.com, go to Settings → API tokens, generate a token. Note your platform ID.
  • Self-hosted Orange Rails: see the Orange Rails self-hosting guide.

5. Configure your fork

GitHub Actions repo variables:

VITE_SUPABASE_PROJECT_ID_DEV       = <your-dev-ref>
VITE_SUPABASE_URL_DEV              = https://<your-dev-ref>.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY_DEV  = <your-dev-anon-key>
VITE_SUPABASE_PROJECT_ID_PROD      = <your-prod-ref>
VITE_SUPABASE_URL_PROD             = https://<your-prod-ref>.supabase.co
VITE_SUPABASE_PUBLISHABLE_KEY_PROD = <your-prod-anon-key>
VITE_OR_SUPABASE_URL               = https://api.orangerails.com  (or your self-host)
VITE_OR_PLATFORM_ID                = <your-orange-rails-platform-id>

Repo secrets:

CLOUDFLARE_API_TOKEN  = <your-cf-token-with-pages-edit>
CLOUDFLARE_ACCOUNT_ID = <your-cf-account-id>

6. Create two Cloudflare Pages projects

In the CF dashboard, create <yourname>-dev and <yourname>-prod. Don't connect them to Git — the GitHub Actions workflow handles deploys.

7. Push

git push origin dev   # auto-deploys to dev
# verify, then
git checkout prod && git merge --ff-only dev && git push origin prod

Within ~60s your dev site is live.


Fully self-hosted (no Supabase Cloud, no Cloudflare)

The repo ships with docker-compose.yml to run Supabase locally and a Caddy reference config. The dist build is static; any web host works.

git clone https://github.com/MorningRevolution/orange-way
cd orange-way
docker compose up -d           # Postgres + Kong + GoTrue + PostgREST + Realtime
supabase db push --db-url postgres://...
bun install && bun run build
# serve dist/ from your reverse proxy of choice (Caddy/nginx)

Reference Caddy block: caddy/Caddyfile.example.


Branch model

dev is staging; prod is live. No main. Lovable (or your IDE) commits to dev. Promote with git merge --ff-only origin/dev on prod. Full breakdown: Branch flow — dev and prod.


Upgrades

git remote add upstream git@github.com:MorningRevolution/orange-way.git
git fetch upstream
git checkout dev && git merge upstream/dev && git push origin dev
# verify
git checkout prod && git merge --ff-only dev && git push origin prod

Backup

Same as any Supabase / Postgres deployment. Data at rest is ciphertext — backups are also opaque. Back up your age key off-server, otherwise a database backup is useless.

Reference script: scripts/backup-vault.sh (writes encrypted dumps to S3-compatible storage).


Help