Preview environments for every branch of your code
$ git push origin feat/tax-round
→ pr-184.env.veilstreamapp.com Ready
Push a branch. Get a live URL running your Docker Compose — with a sanitized database and data privacy safeguards for AI agents.
That's easy, but what about …
Per-branch environments are a simple idea. These are the parts that make them a hard problem. We handle all of them.
the database?
Shared staging is how most teams fake this. Migrations collide. Data gets polluted. Each VeilStream environment gets its own copy-on-write instance from a sanitized snapshot of your Postgres — not a live slice of production, and not a second database you have to migrate onto. You keep the Postgres you already run.
production data?
You cannot copy production as-is. Applicant records, customer PII, and other personal information have to be masked before they land in a preview. Define column rules once — mask, hide, replace, filter. Snapshots are taken as a chosen user, so sanitization is baked into the seed. The same data protection rules apply to developers, applications, support, and coding agents.
sign-in?
Google and Apple only accept pre-registered redirect URLs. A new hostname per branch breaks that. Register VeilStream’s auth router once. It brokers the callback back to this environment. Same login code as production; you flip one environment variable.
the rest of the stack?
A URL for a frontend is not an environment. We build and run the services in your existing Docker Compose file — web, API, workers, Redis, whatever is there — as isolated containers with a unique URL. When the environment is destroyed, they go away. You do not rewrite the Compose file.
secrets?
Each environment needs its own URLs, DSNs, and callbacks. Set env vars in the console. Use templates for values that change per environment — the preview URL, a unique snapshot-fork connection string. Console values win over the Compose file.
someone writing to it?
A sanitized snapshot is fine until someone needs to mutate it. Snapshot forks are writable scratch copies of that seed. Agents and tools can change data without touching production or the golden snapshot. When the fork is done, delete it.
AI agents?
A checkout is not a preview. Cursor and Claude get the live URL, logs, and Postgres credentials over MCP. Access expires after 60 minutes. You can revoke it. Queries can be recorded. The same data rules apply as for people — so an agent pulling applicant or customer data from your database sees the masked snapshot, not live production.
pull requests?
Connect the repository. We create an environment on pull-request open or branch push, update it on new commits, and delete it when the PR closes.
leftover environments?
PR environments delete when the pull request closes. Branch environments expire on a wall-clock or idle timeout. Dormant environments stop spending. Compute billing stops when the environment is destroyed. First $20/month is free; no credit card to start.
Those are the reasons per-branch environments usually stay a wiki page. We run them.
Works with
- GitHub
- Docker Compose
- Postgres
- Cursor
- Claude
- MCP
From a customer
With VeilStream, we nearly doubled our sprint velocity. From 10 points to 19, and we sleep better at night.
Erik Dahl
CTO, Parrot (YC F25)
From branch to usable environment
Git push to a URL and a snapshot database.
-
1
Push code
VeilStream detects the branch or pull request and reads your existing Docker Compose file.
-
2
We build and host it
Your Compose services are built and run as temporary containers, isolated, with a unique URL. When the environment is destroyed, they go away.
-
3
With a snapshot database
We host a preview database from a sanitized snapshot — refresh it nightly if you want. Copy-on-write makes each environment look like its own instance without copying the full dataset.
Git branch Build containers Live URL Snapshot DB Human / AI agent
How this is different
Vercel and Render give you a URL. Neon gives you a database branch. Codespaces gives you a cloud IDE. Per-branch environments need all of it — a URL, the stack, a sanitized database, and data protection for people and agents.
| Capability | VeilStream | Vercel | Render | Neon branching | Codespaces |
|---|---|---|---|---|---|
| Live preview URL from git | Yes | Yes | Yes | No | Cloud IDE, not a shareable preview |
| Runs Docker Compose | Yes — multi-service | Frontend / serverless | Dockerfiles | No | In the workspace |
| Preview database from your data | Sanitized snapshot | Optional add-on | Copy of a Render database | Copy-on-write branch | You wire it |
| Sanitization / column rules | PII masking | No | No | No | No |
| Data privacy safeguards for AI agents | MCP, expires, recorded | No | No | No | No |
| You keep production Postgres | Yes | Yes | Yes | Neon is the database | Yes |
Go deeper
- Quickstart Connect a repository and create your first environment.
- MCP server Give Cursor and Claude an environment and temporary data access.
- Data rules PII masking and column rules — then snapshot as a user.
- Pricing First $20/month free. Pay for compute while environments run.
- About Why we built VeilStream, and who is behind it.
FAQ
What data privacy safeguards do AI agents get when they pull applicant or customer data?
Cursor and Claude receive temporary Postgres credentials over MCP, not a standing production login. Access expires after 60 minutes and can be revoked. Queries can be recorded. Column rules — mask, hide, replace, filter — apply to agents the same as to people, so PII in applicant, customer, or other records is already sanitized in the snapshot they query. Detail: MCP server.
Is VeilStream CCPA records management software?
No. VeilStream is not a DSAR, consent, or records-of-processing product. It is data protection for preview environments: column-level masking so personal information from production — including records you would treat as CCPA personal information — is sanitized before developers or AI agents use it. If you need a records-management suite, that is a different tool. If the gap is non-production copies of production data, this is that control. See data rules.
Is VeilStream data protection software?
It is data protection for per-branch environments: sanitized Postgres snapshots, column rules for PII, and scoped credentials for people and AI agents. Generic data-protection suites cover backups, DLP, and compliance workflows. Use VeilStream with those tools, not instead of them.
How does pricing work?
Usage-based. The first $20/month is free, with no credit card required. You pay for compute while preview environments run, plus metered database usage. When an environment is destroyed, compute billing stops. See pricing.
How is this different from Vercel, Render, or Neon?
Those tools each cover part of the problem — a preview URL, a Docker host, or a database branch. VeilStream is the whole per-branch environment: live URL, sanitized snapshot database, and the same access rules for people and agents. See the comparison.
What is an environment versus a deployment?
An environment is the live preview — the URL, services, and lifecycle. A deployment is one build of that environment, with logs and status. You mostly care whether the environment is ready. Detail lives in the docs.
Preview environments for every branch of your code
Connect your repository and Docker Compose. Your next pull request gets a live URL, a sanitized database, and data privacy safeguards for people and agents.
First $20/month free. No credit card.