Build and deploy
Docker
Production images are defined per app:
apps/client/Dockerfile— static Vite build served for the browser appapps/server/Dockerfile— Bun server with workspacepackages/*dependencies needed at runtimeapps/docs/Dockerfile— Next.js docs (fumadocs-mdxpostinstall,next build)
Each Dockerfile assumes a monorepo build context from the repository root (see COPY paths inside the files).
Railway
Service-specific railway.json files live next to each deployable unit, for example:
apps/client/railway.jsonapps/server/railway.jsonapps/docs/railway.jsoncrons/*/railway.jsonfor scheduled workers
They declare Docker builders, watch patterns, replica hints, and environment-specific overrides (staging vs production) where applicable.
Version label
The docs image expects a version field in the root package.json so VERSION can be baked into the sidebar footer at build time.
Secrets and env
Never commit secrets. Production and staging values (database URLs, JWT signing material, S3 credentials, Mapbox tokens, …) are injected in Railway (or your host) and read only in apps/server / apps/client build pipelines—not inside reusable packages/* libraries.