Basecamp Sherpa
AppsConsole

Production

Deploy the Console to Railway.

Railway service

  1. Add a service → Docker Image → ghcr.io/yannickarmspach/sherpa-console:latest
  2. Add ghcr.io registry credentials (GitHub username + PAT with read:packages)
  3. Set the port to 3001

See Deploy for the build & push workflow.

Environment variables

SUPABASE_URL=https://xxxxx.supabase.co
SUPABASE_ANON_KEY=eyJ...
SUPABASE_SERVICE_ROLE_KEY=eyJ...

LEMONSQUEEZY_API_KEY=
LEMONSQUEEZY_WEBHOOK_SECRET=
LEMONSQUEEZY_STORE_ID=
LEMONSQUEEZY_VARIANT_ID=

WORKER_SECRET=<generate a random secret>

Domain

Set up a custom domain (e.g. console.sherpa.dev). Update the Supabase auth redirect URLs to match.

LemonSqueezy webhook

In the LemonSqueezy dashboard → Settings → Webhooks:

SettingValue
URLhttps://your-console-domain.com/api/webhooks/lemonsqueezy
SecretA random string (set as LEMONSQUEEZY_WEBHOOK_SECRET)
Eventssubscription_created, subscription_updated, subscription_cancelled

Payment flow

  1. User creates an instance in the Console
  2. Console redirects to LemonSqueezy checkout (with instance_id + user_id in custom data)
  3. User completes payment
  4. LemonSqueezy webhook → Console creates subscription + provision job
  5. Worker provisions Railway instance
  6. Instance status updated back to Console

For detailed LemonSqueezy setup (store, products, API keys, local testing), see the LemonSqueezy integration guide.