Preview Dog 🐕

Label an issue or pull request. Get a video back proving what actually happens.

The problem

Support and QA teams file bugs that engineers cannot reproduce. A step is missing, an environment detail is wrong, or a precondition is unstated. The first hour of a bug fix is often spent trying to see the bug before any work on the fix can begin.

The same gap exists in the other direction. A pull request says it adds a feature, but the reviewer still has to check out the branch, install it, boot the app, and click around before they can believe it.

What it does

Add the Reproducibility label to an issue or pull request. Preview Dog creates a dedicated Daytona sandbox, clones the exact commit, starts the app, and uses a browser agent to follow the issue or PR description in a real Chromium browser while recording the session. The recording and a concise account of what actually happened are posted back to the same GitHub thread.

On an issue, it reaches a verdict

✅ Reproduced

After clicking Delete on “Walk the dog,” “Buy milk” disappeared instead.

(recording)
commit 8f26e8b · 27s

If the reported behavior cannot be observed, it returns Not reproduced instead.

On a pull request, it demonstrates the change

🎬 Preview

Clicking any of the three dashboard KPI cards opens a detail modal showing month-over-month movement against previous values, plus a monthly target with progress percentage.

(19-step walkthrough recording)

A PR preview deliberately has no ✅/❌ verdict. Its agent output schema does not even contain a reproduced field: giving it one would invite the agent to grade a change it was only asked to demonstrate.

How it works

Label detected → webhook verified → worker started → sandbox created → exact commit cloned → app booted → browser agent records → GitHub comment updated

  1. Preview Dog detects the Reproducibility label on an issue or pull request and verifies the GitHub webhook signature.
  2. A worker creates a dedicated Daytona sandbox and clones the exact target commit.
  3. The repository is booted inside the sandbox, where browser-use drives a real Chromium browser and records everything it observes.
  4. The recording is pulled back into the control plane, kept under GitHub's upload limit, and published with the agent's evidence-based summary.
  5. The sandbox is always destroyed in a finally block.

One progress comment is posted immediately and edited in place throughout the run, so users receive one notification rather than four.

Sponsor technologies

Daytona — one isolated environment per run

Every issue or pull request is reproduced in its own dedicated Daytona sandbox. Our prebuilt snapshot includes Chromium, Node.js 20, browser-use, and the agent runtime. It boots in 0.7 seconds, so the run spends its time examining the application instead of installing tooling.

The isolation boundary is also part of the security model: untrusted repository code runs inside the sandbox, while the GitHub token remains in the control plane and never enters it.

Fireworks AI — fast serverless reasoning

The browser agent runs GLM-5.2 through Fireworks Serverless Inference. Fast inference keeps multi-step browser walkthroughs responsive and lets a typical end-to-end capture complete in approximately three minutes.

WorkOS — enterprise-ready authentication

The dashboard is protected with WorkOS AuthKit. This gives Preview Dog a path from day-one authentication to enterprise identity requirements, including SSO and standards such as SAML and OIDC. Teams can securely view run history and reproduction rates across their repositories.

CopilotKit — a repository-aware dashboard assistant

The dashboard includes a CopilotKit-powered chatbot. Users can ask questions about the work happening across a repository—recent reproduction runs, observed behavior, failures, and recurring patterns—without manually searching through individual GitHub threads.

What makes it real

It works on more than its own demo app

We proved Preview Dog on two unrelated repositories: a deliberately buggy toy task list and a real Next.js 16 CRM dashboard with 98 dependencies. Standing up the second app meant baking its node_modules into the Daytona snapshot, so a run takes seconds to start instead of spending minutes on npm ci.

It tells the truth when the bug is not there

We keep a control issue describing a bug that does not exist. Preview Dog must return Not reproduced. If it ever agrees with that report, the agent is echoing the issue text instead of reading the page—and no verdict from it can be trusted.

It found a bug we did not ask it to test

While previewing a PR that added a filter box, the agent filtered the list to one task, clicked Delete, cleared the filter, and discovered that a different task had been removed.

It had been told to demonstrate the feature, not test it. Because its prompt requires it to report only what it actually observes on the page, the walkthrough became evidence of a real bug that had survived through the new UI.

What’s next

  • Automatic video editing: add context-aware zooms, speed up idle moments, and turn raw browser recordings into concise, reviewer-friendly walkthroughs.
  • Issue repair: when a report cannot be reproduced, identify the missing steps, preconditions, or environment details and propose an improved issue description automatically.

Built With

Share this project:

Updates