Recording of the visual regression run on seo.bike · seo.bike — app walkthrough.

In this video· click a step to jump to it

S
Passed ✓

Test recording

seo.bike — app walkthrough

71,827 ms · 29,376 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against seo.bike. 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, 900); await new Promise(r => setTimeout(r, 250)); await anim(max, 0, 500); })()";

  stepLogger.log('Scenario 1: Homepage');
  await page.goto(baseUrl, { waitUntil: 'domcontentloaded' });
  const accept = page.getByRole('button', { name: /accept|allow|got it|ok$/i }).first();
  if (await accept.isVisible().catch(function () { return false; })) { await accept.click().catch(function () {}); }
  await page.waitForTimeout(1600);
  await page.evaluate(SCROLL_THROUGH).catch(function () {});
  await page.screenshot({ path: shot(1, 'home'), fullPage: true });
+60 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
0.89%
Text
—
DOM
✓
Network
+99 −99
Console
✓
A11y
A
Perf
✓
URL
✓
Variables
—
Full report
Log in →
29,376
Diff px
1m 12s
Duration
A
Accessible
WCAG 2.2 · 93
A
Fast
Web Vitals · 100

Notes from the demo run

AI-generated

seo.bike's authed workspace is a clean SEO/GEO command center: a 0/4 'Get started' checklist, live counters (connected sites, audits, critical issues, chatbots), a Free-plan API token ready to copy, and a genuinely useful on-page SEO Checker that fetches and scores any live URL in seconds.

Highlights
  • Free tool is the hook
    The on-page SEO Checker runs a real crawl-and-score on any URL with no signup - we ran it on stripe.com and it fetched and analyzed the live page in seconds.
  • API token on the free plan
    The dashboard exposes a working API token even on the Free plan, so developers can wire the tools into CI or a CMS before upgrading.
Friction points
  • Continue-with-Google bounces to /login
    Google sign-in completes the consent screen but returns to /login without creating a session; we fell back to email+password. Worth checking the /login/google/callback handler - it may be silently dropping new signups.
  • Verify step is ambiguous
    After signup you land on /verify for a 6-digit code, yet the nav already shows 'Account / Logout', which makes it unclear whether you're already signed in.

7 visual changes

Step 16,875 px changed
Before
Before
After
After
Diff
Diff
Step 34,372 px changed
Before
Before
After
After
Diff
Diff
Step 54,466 px changed
Before
Before
After
After
Diff
Diff
Step 61,343 px changed
Before
Before
After
After
Diff
Diff
Step 92,375 px changed
Before
Before
After
After
Diff
Diff
Step 105,144 px changed
Before
Before
After
After
Diff
Diff
Step 114,801 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
tests
all passing
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
57,421 test runs recorded · 1,174 products tested with Lastest

This test was built for seo.bike — 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.