Destesi Preview

A live app
for every
pull request.

Your compose stack spins up in Kubernetes with a forked database branch, env templates resolved server-side, and OAuth passthrough so sign-in just works. Reviewers stop reading diffs and start clicking buttons.

Drops into the stack you already have

GitHub Actions
Docker Compose
Kubernetes
PostgreSQL
Amazon S3
OAuth (Google · GitHub · Slack)
How it works

One workflow, a preview per PR

Open a pull request. A live preview with a forked database branch is waiting by the time the review starts.

01

Connect

Connect your GitHub account in Destesi Connect and point an environment at your production DB through Snap. One-time per environment.

dst env remote default production-pg
02

Upsert on PR open

Your GitHub Action calls dst preview upsert on opened and synchronize. Idempotent — keyed by PR number.

dst preview upsert --pr-number 42
03

Review on a real URL

Preview URL gets posted to the PR. App + forked DB, real auth via OAuth passthrough, write-isolated per PR.

https://pr-42.your-domain
Agent overlay

A reviewer spots a typo, the agent fixes it.

Press Cmd + Shift + A on any preview. The in-overlay agent edits files, runs git commit, pushes — your CI redeploys the preview. The reviewer never leaves the page.

On first load each preview shows a change-summary modal: a 2-3 sentence AI digest of what the PR does, plus per-file add/delete counts. Re-shows on every new commit so reviewers never miss a meaningful update.

Read about the overlay →
// inside the preview, agent panel open
you > the empty-state copy on /orders is broken
scanning components/OrdersList.tsx…
edit: src/components/OrdersList.tsx (1 hunk)
git commit -m "fix(orders): empty-state typo"
git push origin pr-42 ✓
redeploying preview…
healthy 18s · refresh to see changes
Features

Built for the way teams actually ship

🔗

Forked DB branch

Each preview gets its own Snap-backed copy-on-write Postgres branch. Writes stay per-preview. Source DB is never touched.

📊

Server-side env templates

${postgres.dsn}, ${postgres.host}, etc. resolve to the forked snap. Unresolved refs fail loud — never silently empty.

🔑

OAuth passthrough

The overlay rewrites outbound state for Google, GitHub, Microsoft and Slack so one pre-registered callback serves every ephemeral host.

💻

Compose-native

Your existing docker-compose.yml is the preview definition. No parallel YAML to maintain. The runner builds inside a DinD pod.

👁

One preview per PR

Idempotent upsert keyed by (environment, PR number). Repeated synchronize events redeploy in place — no drift, no duplicates.

🤖

Agent commits back

In-preview agent (Cmd+Shift+A) edits files, commits, and pushes — CI redeploys. The reviewer drives changes from the preview itself.

📜

Change-summary modal

First-load dialog with a 2-3 sentence AI digest of the PR plus per-file add/delete counts. Re-shows on every new commit.

🛡

Scoped CI tokens

dst api-key create --preview-runner mints a token with preview:write on one environment. A leaked key can’t touch others.

🔌

Auto NodePort & ingress

Reserved port window, automatic service + ingress wiring, per-PR hostnames. The controller handles the Kubernetes plumbing — you ship the compose file.

Stop reviewing PRs on drifted staging.

Give every pull request a real preview, with real data, isolated per PR. Free to start.