Railway — the services
api, app, rag, and notification run on Railway,
each in its own service, built with Railpack (no Dockerfile needed for
most). Services talk to each other over Railway’s private network
(*.railway.internal).
Huddle deploys across two platforms, split by workload:
Railway — the services
api, app, rag, and notification run on Railway,
each in its own service, built with Railpack (no Dockerfile needed for
most). Services talk to each other over Railway’s private network
(*.railway.internal).
Cloudflare — the web properties
website and docs deploy to Cloudflare Workers — the website via
OpenNext, the docs via the @astrojs/cloudflare
adapter. Both deploy from main with wrangler.
The Railway services run in three environments end-to-end:
development — app.development.huddlesurety.co,
api.development.huddlesurety.co. A real, deployed environment (not just
local), and blackbox-probed
like the others.staging — app.staging.huddlesurety.co, api.staging.huddlesurety.co.
The four services deploy here from their staging branch.production — app.huddlesurety.co, api.huddlesurety.co. Deploys from
production.The four services promote staging → production fast-forward only:
production is always an exact, already-tested staging commit, so there’s no
separate release pipeline, and rollback is just pointing production at an
older staging SHA.
The Cloudflare properties (website, docs) and observability don’t use this
flow — they deploy from main on push.
Each repo runs its own checks on push:
| Service | Checks |
|---|---|
| api | go test, gofumpt, golangci-lint, OpenAPI docs in sync; drives SDK generation on staging |
| app | tsc (TS7), ESLint, next build typecheck |
| rag | No in-repo CI |
| notification | No in-repo CI |
The API’s CI additionally generates and publishes the SDKs — see API › SDK generation.
@huddlesurety packages
install using an injected GITHUB_TOKEN (npm scope for TS services, git-URL
rewrite for the Python SDK in rag). RAG’s Railpack config additionally
installs poppler-utils and tesseract-ocr for PDF/OCR.wrangler deploy, from build output
(.open-next/ for the website, ./dist for the docs).Railway service settings — sources, domains, replicas, volumes — are managed
declaratively in the infra repo: see
Infrastructure as Code.