Skip to content

Environments

Production runs on Railway. The Railway project has a single environment (production); the Pulumi stage stack also writes into it. New services are added to the existing project rather than spun up as separate projects.

Temporal (provisioning/convergence workflows) is hosted fully on Railway (temporal-server / ui / postgres over private networking).

Infra is Pulumi (TypeScript) in infra/, with R2-backed state and stack-aware hostnames. GitHub CI runs pulumi up automatically on merge — never run it by hand.

  • Neon — managed Postgres (Vendure, Directus, scheduler).
  • R2 — Cloudflare S3-compatible object storage (assets).
  • Redis — BullMQ queues + the SSE/convergence bridge.

CI runs on Blacksmith runners. Note: scheduler-api’s tsc needs NODE_OPTIONS=--max-old-space-size=6144 to avoid OOM, and the e2e-sync job builds a hardcoded subset of workspace packages before booting scheduler-api — new runtime @nexus/* deps must be added there.