Product Environments
Try changes before they go live.
Staging, a fresh copy for every pull request, and a one-click rollback for anything that slips through.
production
main branch, shop.example.com- webOnline
- apiOnline
- PostgresOnline
staging
develop branch, web-staging-m2x8.up.dawnrose.ai- webOnline
- apiOnline
- PostgresOnline
pr-42
pull request 42, web-pr-42-q7m2.up.dawnrose.ai- webBuilding
- apiOnline
- PostgresOnline
Rolled back api to #419 seconds
Image, settings and variables came back together. Nothing was rebuilt.
Sample data
A copy of production for every pull request.
Open a pull request and its own environment comes up: production’s services and settings, on the PR’s branch, at its own URL. Close or merge it and the environment is removed. Hobby and Pro
- PR #42 opened
pr-42 starts as a copy of production, on its branch.
- pr-42 is live
web-pr-42-q7m2.up.dawnrose.ai
Its databases start empty. - A push to the branch
Builds and deploys to pr-42 again.
- Merged
pr-42 is removed, containers and all.
A safe way to ship.
A preview for every pull request
Open a PR and a copy of the project comes up at its own URL. Merge or close it and it is removed. On Hobby and Pro.
- pr-42 Add coupon codesBuilding
- pr-41 Fix cart totalsOnline
- pr-39 Product searchRemoved when merged
Staged changes
Settings and variable changes wait for the next deploy, so you can change several things and ship them together.
- Memory of web1 GB → 2 GB
- STRIPE_KEY on apiChanged
- NODE_ENV on webAdded
Three changes wait for the next deploy, and go out together.
Rollbacks
Recent deploys keep their image, settings and variables, so going back doesn’t rebuild anything.
- #42 Add coupon codesOnline
- #41 Fix cart totalsRoll back
- #40 Upgrade NextRoll back
Environments
production, staging or any name you like, each with its own variables, domains and data. Up to 2 per project on Trial, 10 on Hobby and 50 on Pro.
Copy an environment
Start staging as a copy of production, services and settings included.
Shared variables
Values every service in an environment uses, referenced as
${{ shared.KEY }}.
Try it on a copy. Then ship it.
$ claude mcp add --transport http dawnrose \
https://app.dawnrose.ai/mcp \
--header "Authorization: Bearer YOUR_TOKEN"