Skip to content

Secrets management

Where secrets live and how to rotate them.

Never commit secrets. Use platform secret stores:

PlatformStore
Cloudflare Workerswrangler secret put / pnpm secrets:sync
Cloudflare PagesProject environment variables
Fly.iofly secrets set

Worker name: soultales-partner. Full runbook: dashboard/DEPLOY.md in the monorepo.

TypeExamplesWhere to set
PUBLIC_*PUBLIC_CLERK_PUBLISHABLE_KEY, PUBLIC_SITE_URLGitHub Actions build secrets + local .env
RuntimeCLERK_SECRET_KEY, STRIPE_SECRET_KEY, DIRECTUS_TOKENCloudflare Worker secrets only

Sync runtime secrets from dashboard/secrets.json:

Terminal window
cd dashboard
cp secrets.json.example secrets.json # first time only
pnpm secrets:sync

Set on the production environment:

CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, PUBLIC_SITE_URL, PUBLIC_CLERK_PUBLISHABLE_KEY, PUBLIC_STRIPE_PUBLISHABLE_KEY, PUBLIC_CHATWOOT_WEBSITE_TOKEN

DIRECTUS_OUTBOUND_SECRET must match on the Worker and Fly Directus (real-ireland-app), with FLOWS_ENV_ALLOW_LIST=DIRECTUS_OUTBOUND_SECRET on Directus.

Worker name: soultales-www. See frontend/DEPLOY.md.

DIRECTUS_URL, DIRECTUS_TOKEN, Better Auth secrets (AUTH_SECRET, BETTER_AUTH_URL), Turso connection (ASTRO_DB_REMOTE_URL / ASTRO_DB_APP_TOKEN or TURSO_DATABASE_URL / TURSO_AUTH_TOKEN), OAuth client IDs, Mailgun keys

DB_PASSWORD, GCS credentials, Directus KEY/SECRET

SECRET_KEY_BASE, Neon Postgres, Upstash Redis, R2 credentials: see helpdesk/.env.example

Copy .env.example files where provided. Use .env locally; files are gitignored.