Environments
Hosting
Section titled “Hosting”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).
Infrastructure as code
Section titled “Infrastructure as code”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.
- Overview:
infra/README.md - Procedures:
infra/RUNBOOK.md
Managed data stores
Section titled “Managed data stores”- 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.