Guide

Visual release review: from screenshots to useful decisions

Published 2026-09-17

Most release review still happens as a folder of screenshots, a Slack thread, or a screen-share: someone looks at what changed, types a reaction, and the context evaporates by the next release. None of that is wrong, exactly — it's just not continuous. The feedback doesn't stay attached to the version it was about, and the next release doesn't know what the last round of review decided.

The useful unit isn't "a screenshot." It's a screen state, from a known release, with enough context to make a decision.

Six pale screen panels connect to one larger blue review canvas, floating above a graphite grid.
Editorial illustration — a concept image, not a capture of the product or any customer application.

Start with a small review contract

Before collecting images, write down the decision the review supports. "Look at the app" is too broad. A practical contract names the release, the environment, the screen states in scope, the reviewer, and what's explicitly excluded. For example:

Review the invite form, validation message, pending invitation, and accepted-invitation screen in a synthetic workspace, at one declared desktop viewport and one declared mobile viewport. Review layout and wording. Email delivery and server authorization are outside this visual review and need separate checks.

That's an illustrative contract, not a report of a review UIProof ran — a stated intention to capture four states isn't evidence that four states were captured. Keep missing, blocked, and skipped states visible in the scope, too: three available images and one missing one is partial coverage, not four checks.

Give each screen a stable identity

Filenames like final-new-2.png make comparison impossible. A useful identity names the app or board, the route, the state, and the relevant role — invitations / pending / administrator can stay the same logical screen across releases even as its 390×844 and 1440×900 captures change. This is exactly what a private board is built around: each release keeps its own immutable record of evidence and a separate record of what was in scope to check, so a changed screenshot and a changed agreement about what to check are never confused with each other.

Four versions of the same abstract screen progress from a wireframe to a refined blue panel along a horizontal path.
Editorial illustration — a concept image, not a capture of the product or any customer application.

Judge the state, then classify it

A changed image doesn't automatically mean a defect — a correct new feature, different fixture data, or a different rendering environment can all change what's on screen. Playwright's own visual-comparison docs specifically warn that screenshots can vary with OS, browser, and fonts, so keep comparable captures in a controlled environment when the comparison matters. For each state, classify the observation in plain language: intended change, needs clarification, possible defect, or not enough evidence — a visual concern shouldn't become a functional-failure claim just because it looks serious.

Write feedback someone can act on

"Mobile is broken" creates another round of questions instead of a fix. A useful observation names: the release and screen, what was observed, what was expected, the affected scope, supporting evidence, and what a recheck would need to look at. Consider this hypothetical:

On the pending-invitation screen in release R2 at 390×844, the primary action extends beyond the captured viewport. Expected: the action stays fully visible without horizontal scrolling. Recheck the same state at this width and the adjacent supported widths. This observation does not establish whether invitation delivery works.
A blue pinpoint on a pale screen connects by a short curved line to a blue annotation card.
Editorial illustration — a concept image, not a capture of the product or any customer application.

Attach feedback to a screen and a version, and invite reviewers with scoped roles instead of a shared inbox. Public-view comments from non-collaborators or viewer-role collaborators require owner approval before appearing publicly. Owner, editor, and commenter feedback is approved immediately. Viewer invitations do not permit private comments. Don't mark something "fixed" because a developer says it is — record the patch claim separately from the recheck result.

A supplied commit is an assertion, not a proof

A recorded commit value needs an honest label too: a supplied commit identifier is an assertion about origin unless a trusted process verifies it. A digest helps identify an artifact — it doesn't prove the application behind it is correct.

Share the smallest useful packet

Before publishing, review the actual images and labels — not just the board title — and keep working notes private. UIProof supports publishing a specific release or screen to a review link when you're ready, while private collaborator notes stay private even after publishing. Revoking a link denies new access, but can't retrieve copies someone already downloaded or that a third-party service has cached.

Two partitioned groups of pale screens remain separate while a selected blue panel is shown moving into a public display.
Editorial illustration — a concept image, not a capture of the product or any customer application.

Recheck against an explicit expectation

The next release should answer the original feedback: the same logical state, the same declared environment, fresh evidence, and the expected outcome. A new screenshot can demonstrate the corrected layout at that state and viewport — it can't establish unrelated behavior. When behavior matters, attach the result of a separately defined assertion; "the button is visible" and "the server rejected an unauthorized action" are different claims with different evidence requirements.

See it worked through

Three specific, executed, reproducible synthetic fixtures make this concrete:

Each page shows the actual before/after screenshots from that one executed run, the exact assertion that was checked, and what it deliberately doesn't prove — an inspectable receipt, not a claim.

Make it a habit, not a one-off

The discipline behind all of this — what counts as "captured," "reported," or "reviewed" — is written out on the evidence levels page. The practical version is the release-review checklist, which works whether or not you use UIProof for it.

Want to see the loop before running it on your own app? Explore the synthetic example, or create a private board and bring your own release.

Sources and limitations

Playwright, "Visual comparisons": playwright.dev/docs/test-snapshots. See also product status and evidence levels. This is a review method, not a comprehensive test strategy or certification standard — the invitation example above is hypothetical, and no customer results or time-saving measurements are claimed.