Deployments
Server-side builds, immutable bundles, atomic publish. Every deploy is reversible — the previous version stays alive until the new one is fully uploaded, and canary rollouts catch regressions before they reach all users.
The pipeline
Studio "Deploy" click
→ BuildService stages workspace
→ npm install + vite build (server-side)
→ pending migrations applied to production DB (idempotent)
→ manifest (path / size / sha256) + logs
→ status: building → built
→ AppBundleStore upload (S3)
→ status: built → uploading → canary
→ traffic shifts: 5% → 25% → 50% → 100%
→ previous deployment marked superseded
Deployment lifecycle
| Status | Meaning |
|---|---|
| building | Build job running on the server. |
| built | Bundle assembled, awaiting upload. |
| uploading | Bundle being uploaded to S3. |
| canary | Live to a portion of traffic, watching error rate and latency. |
| live | Live to 100% of traffic. |
| superseded | A newer deployment is live. Bundle retained for rollback. |
| failed | Build, upload, or canary regression. Previous version remains live. |
Atomic & reversible
Live URL routing reads from a registry — flipping it from one SHA to another is a single write. There is no in-between state where users see a partially-uploaded bundle. Rollback is the same write in the other direction.
Canary rollouts
Every deploy ships through traffic-weighted stages — by default 5%, 25%, 50%, 100% with a short observation window between each. Base watches error rate and P95 latency; if either regresses against the previous deploy, the rollout pauses and rolls back automatically.
Override per project:
// atelier.config.ts
export default {
deployments: {
canary: {
stages: [10, 50, 100],
observationWindowSec: 300,
autoRollback: {
errorRateThreshold: 0.02,
latencyP95Threshold: 1.5, // x baseline
},
},
},
};
For low-risk changes, set canary: 'skip' and Base publishes directly to 100%.
URLs
Production: https://<slug>.apps.atelier.style
Custom: https://your-domain.com (after DNS verification)
Branch: https://<slug>-pr-42.apps.atelier.style (per PR)
Three steps — TXT verify, route the CNAME (or ALIAS at apex), certificate auto-provisioned. Apex, www, wildcard, per-tenant. See Custom domains for the full walkthrough.
Environment variables
Set per-environment in the Base console. Available inside Functions and the build step; not exposed to the browser unless prefixed with NEXT_PUBLIC_ or your framework’s equivalent.
Rollback
Open the deployment history in the Base console. Each historic deploy has a Promote button — the live URL flips back instantly, no rebuild.
Observability
Every deploy carries a build SHA that propagates to logs, traces, and error reports. When something breaks at 3am, you can find the exact deploy, the exact change, and the diff that introduced it.