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
- Self-hosting questions → feedback.orangeway.app (tag: ow-self-host)
- Security issues → security@bitbooks.com
- General support → support.orangeway.app