Recording of the visual regression run on buildhop.io · BuildHop — app walkthrough.

In this video· click a step to jump to it

B
Passed ✓

Test recording

BuildHop — app walkthrough

94,623 ms · 286,251 pixels changed

We built this regression test for buildhop.io — it's yours to keep, free.

Take this test with you

This is a real Playwright test, recorded against buildhop.io. Claim it into your own workspace and re-run it on every deploy — free.

export async function test(page, baseUrl, screenshotPath, stepLogger) {
  const shot = (n, slug) => screenshotPath.replace('.png', `-${n}-${slug}.png`);
  const SCROLL_THROUGH = "(async () => { const ease = t => 1 - Math.pow(1 - t, 3); const max = Math.max(0, document.body.scrollHeight - window.innerHeight); if (max < 40) return; const anim = (a, b, ms) => new Promise(res => { const t0 = performance.now(); const step = now => { const p = Math.min(1, (now - t0) / ms); window.scrollTo(0, a + (b - a) * ease(p)); p < 1 ? requestAnimationFrame(step) : res(); }; requestAnimationFrame(step); }); await anim(0, max, 1400); await new Promise(r => setTimeout(r, 350)); await anim(max, 0, 800); })()";

  await page.context().setExtraHTTPHeaders({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36' });
  for (const pattern of ['**/cdn-cgi/scripts/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/www.googletagmanager.com/**']) {
    await page.route(pattern, function (r) { return r.abort(); }).catch(function () {});
  }

  // ---------- Public context: home ----------
  stepLogger.log('Public: BuildHop home');
  await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
+89 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
35.69%
Text
—
DOM
✓
Network
+110 −110
Console
✓
A11y
A
Perf
528 over
URL
✓
Variables
—
Full report
Log in →
286,251
Diff px
1m 35s
Duration
A
Accessible
WCAG 2.2 · 100
Review
Fast
Web Vitals

Notes from the demo run

AI-generated

We created a BuildHop account with email and password and drove the whole founder workspace: the points dashboard, both leaderboard windows, the founders board, the 212-entry distribution checklist and its filters, the product submission form, the results dashboard and account settings. Signup to working dashboard was one form and no verification step. The strongest idea in the product is that distribution is modelled as inventory you work through rather than a one-shot launch - 212 directories tracked as Done / Not Done, with 8 marked Our Picks, is a concrete to-do list where most launch platforms give you a single button and a leaderboard.

Highlights
  • The submit form pre-flights your own site
    Typing a URL triggers a live check - 'Iframe preview is allowed. Website is reachable and its security headers allow BuildHop.' Telling a founder their X-Frame-Options will break the preview before they submit, rather than after review, is a genuinely thoughtful touch.
  • Distribution as a tracked checklist
    212 directories with Done / Not Done / Our Picks filters turns 'go get distribution' into a queue. It also gives a returning user an obvious reason to come back, which a launch-day leaderboard alone does not.
  • The empty states tell you what to do next
    Results reads 'No results yet - submit your first launch to start collecting tracked views, votes, and outbound clicks' with the action attached. Every zero-state we hit named the next step instead of just being blank.
  • You show your own proof in the footer
    A VerifiedDR rating of 50, a FreeScan health score of 90 and a 30-day uptime strip sit in your own footer. For a distribution product, dogfooding the credibility signals you sell is the right move.
Friction points
  • Workspace routes read like internal ticket names
    The sidebar links to /app/voting-and-lightweight-leaderboard, /app/founder-results-and-proof-dashboard and /app/founder-submission-and-review-flow. The nav labels are clean (Leaderboard, Results), but the URLs are the spec titles. They show up in the address bar, in shared links and in search results, and 'lightweight' in a customer-visible URL undersells the page. Short slugs (/app/leaderboard, /app/results, /app/submit) would cost one redirect map.
  • The sticky header re-renders mid-page on a long capture
    On full-page renders of /app/create the fixed header paints a second time partway down the form, over the content. Anything that renders your page at full height - a screenshot tool, a PDF export, a print stylesheet, some in-app preview embeds - will show that duplicate bar. A print/full-height media query that unpins the header clears it.

11 visual changes

Step 169,445 px changed
Before
Before
After
After
Diff
Diff
Step 247,531 px changed
Before
Before
After
After
Diff
Diff
Step 341,756 px changed
Before
Before
After
After
Diff
Diff
Step 4381 px changed
Before
Before
After
After
Diff
Diff
Step 550,755 px changed
Before
Before
After
After
Diff
Diff
Step 642,394 px changed
Before
Before
After
After
Diff
Diff
Step 7101 px changed
Before
Before
After
After
Diff
Diff
Step 8317 px changed
Before
Before
After
After
Diff
Diff
Step 9134 px changed
Before
Before
After
After
Diff
Diff
Step 1010 px changed
Before
Before
After
After
Diff
Diff
Step 1133,427 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
a11y
WCAG AA
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
57,226 test runs recorded · 1,151 products tested with Lastest

This test was built for buildhop.io — claim it free

One click copies the test and baseline screenshots into your own Lastest workspace. Re-run on every deploy and catch regressions before your users do — free, no card required.