Preview Environments
Boot a per-ticket preview — a live shop from your repo and a database snapshot — and watch the AI agent's changes right inside the ticket.
A preview is a live, per-ticket environment you can boot on demand: Spedy clones your project's repository, restores a database snapshot, and starts the application (e.g. Shopware or Magento). You see the running shop in an iframe next to the ticket — and it's where the AI coding agent makes its changes.
How it works
When you open a ticket and start its preview, Spedy boots a container stack that:
- clones the project's preview repo,
- restores a database snapshot, and
- starts the application.
Each ticket has exactly one preview. The preview URL is unique to your organization and only reachable with a valid Spedy session — see Security & isolation.
Bringing your own stack? If your repo ships its own
docker-compose.ymlinstead of using a Shopware/Magento template, see Preview Config (BYOC) for the.spedy/preview.ymlfile that tells Spedy which service and port to route.
Prerequisites
Before a project can boot previews, your organization needs an active GitHub integration under Settings → Integrations. Without it, the repository section shows a hint instead of the repo picker.
Set up a project
Open Project → Settings → Preview.

Connect a repository
In the Repository section:
- Click Connect repo and pick a GitHub repository from the dropdown (the list comes from your organization's GitHub integration).
- Confirm the base branch (pre-filled from the repo).
- Click Connect.
The freshly connected repo is automatically marked as the preview repo (green badge). A board can have several repositories (e.g. for the runner or CI) — but exactly one is the preview repo. Use Use for preview to move the marker to a different repo.
The preview container clones this repo on every boot. Branches and commits made by the AI agent are pushed here.
Upload a database snapshot
Without a snapshot, a fresh preview boots with the empty demo database. For realistic data, use the Database snapshots section:
- Give it a name (e.g.
prod-baseline). - Choose a
.sqlor.sql.gzdump (up to 4 GB). - Click Upload.
- On the entry, click Set as default → it gets a green Project default badge.

The project default is restored into every preview of the project. You can override it per ticket — see Override the database per ticket.
Use the preview in a ticket
Click the preview icon in the ticket header (or open …/tickets/<id>/preview directly). The first time, it shows "Preview is off" — click Start preview. The first boot takes ~30–60 s (container start + repo clone + snapshot restore); after that it's seconds.
Once it's up, the left half shows the shop in an iframe, the right half the ticket panel and agent:

Idle timeout
While the preview tab is open, a heartbeat keeps the container alive. After ~15 minutes of inactivity it stops automatically — just start it again next time.
Override the database per ticket
To boot a specific ticket against a different dump (for example, to reproduce a customer-specific bug), open the ticket → Properties tab → Preview DB field.

Resolution order at boot (highest priority first):
- Per-ticket override (this field)
.spedy/snapshots/<branch>.sql.gzin the repo- Project default (see above)
.spedy/snapshots/default.sql.gzin the repo- Template seed (empty demo database)
The selection takes effect on the next container boot — a running preview keeps its database until it restarts.
Security & isolation
- Organization isolation. Each preview gets an org-unique slug, so two organizations never collide — even with the same board prefix. Every request to a preview is checked against the caller's organization.
- Session-gated. The preview URL is only reachable with a valid Spedy session and only for your own organization.
- Private repos. Cloning private repositories uses your organization's connected GitHub credentials.
Troubleshooting
| Symptom | Cause / fix |
|---|---|
| Repository section shows "No active GitHub integration" | The org has no GitHub integration — connect one under Settings → Integrations |
| Preview URL returns 403 | No valid session, or the preview belongs to another organization |
| Preview boots with an empty database | No project-default snapshot set and no .spedy/snapshots/ in the repo |
| Changes to the database don't show up | The snapshot selection applies on the next boot — stop and restart the preview |