Recording of the visual regression run on brokenrepo.tech · BrokenRepo — app walkthrough.

In this video· click a step to jump to it

B
Passed ✓

Test recording

BrokenRepo — app walkthrough

112,775 ms · 73,090 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against brokenrepo.tech. 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' });
  await page.route('**/cdn-cgi/scripts/**/email-decode.min.js', function (r) { return r.abort(); }).catch(function () {});
  await page.route('**/browser.sentry-cdn.com/**', function (r) { return r.abort(); }).catch(function () {});
  await page.route('**/cdn.segment.com/**', function (r) { return r.abort(); }).catch(function () {});

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

Checks run

Run
✓
Visual
44.48%
Text
—
DOM
✓
Network
+84 −168
Console
✓
A11y
A
Perf
560 over
URL
✓
Variables
—
Full report
Log in →
73,090
Diff px
1m 53s
Duration
A
Accessible
WCAG 2.2 · 94
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed up for BrokenRepo and drove the whole loop end to end: challenge library, search and the level/category filters, then into the lab for The Missing Name, opening files in your in-browser editor, revealing a hint, and running the vitest suite until the 2-of-3 result came back. Your signup is the fastest we have hit all week: email, password, done, straight into the library with a session. No verification tab, no captcha, no onboarding wizard. The lab itself is the standout, a real sandbox that boots in under a second and returns a genuine AssertionError with a stack trace, not a canned message.

Highlights
  • Signup is one screen and grants a session immediately
    Email plus password, no verify-email gate and no captcha. We were in the challenge library about four seconds after clicking Create account. Most tools we walk this week cost an evaluator two or three context switches before they see anything.
  • The lab returns a real failure, not a canned one
    Run tests gave back 2 of 3 passed with the actual vitest AssertionError (expected undefined to be 'Priya Sharma') and the full stack. That is the moment the product sells itself, and it lands in roughly 25 seconds.
  • Progress is genuinely persisted
    After one attempt, /progress moved to 1 attempted and the challenge row switched from Open challenge to Continue. The state round-trip works, which is the part most practice sites fake.
Friction points
  • The header renders logged-out for a beat after signup
    Straight after Create account the nav still showed Log in / Create account while the page underneath was already authenticated, then swapped to My progress / Log out. A brand-new user can read that as the signup not having worked. Resolving the session on the server for that first render would remove the flicker.
  • Preparing sandbox stays on screen after the lab is usable
    Run tests, the file tree and the editor were all interactive while the status still read Preparing sandbox, and it only flipped to Sandbox ready later. Flipping the label as soon as the controls are live would stop people waiting on a lab that is already working.

6 visual changes

Step 716,713 px changed
Before
Before
After
After
Diff
Diff
Step 825,748 px changed
Before
Before
After
After
Diff
Diff
Step 925,748 px changed
Before
Before
After
After
Diff
Diff
Step 10275 px changed
Before
Before
After
After
Diff
Diff
Step 114,026 px changed
Before
Before
After
After
Diff
Diff
Step 12580 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
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 brokenrepo.tech — 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.