Recording of the visual regression run on beautybind.com · BeautyBind — app walkthrough.

In this video· click a step to jump to it

B
Passed ✓

Test recording

BeautyBind — app walkthrough

41,010 ms · 4,377 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against beautybind.com. 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, 1200); await new Promise(r => setTimeout(r, 300)); await anim(max, 0, 700); })()";

  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 ['**/*googletagmanager*/**', '**/*google-analytics*/**', '**/*.google-analytics.com/**', '**/cdn-cgi/scripts/**', '**/sentry-cdn.com/**', '**/connect.facebook.net/**']) {
    await page.route(pattern, function (r) { r.abort().catch(function () {}); }).catch(function () {});
  }

  let n = 1;

  stepLogger.log('Scenario 1: Dashboard');
+52 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
3.85%
Text
—
DOM
✓
Network
+9 −9
Console
✓
A11y
A
Perf
9 over
URL
✓
Variables
—
Full report
Log in →
4,377
Diff px
41s
Duration
A
Accessible
WCAG 2.2 · 90
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

BeautyBind is a genuinely polished salon-management SaaS for an indie launch. Registration is a clean single-column form with live password-strength hints and a required Terms checkbox, email verification is a one-click link, and the dashboard greets you with a 'Good afternoon' header, today's appointment/customer/top-service cards and a quick-stats row. The sidebar covers Calendar, Customers, Staff, Locations, Services and Settings, and empty states ship with friendly sample data.

Highlights
  • Sample data in every empty state
    Customers already lists 'Customer One/Two/Three — feel free to edit or delete', so a new owner sees how the product works instead of a blank page.
  • Add Customer is a focused side-sheet
    Full name, email, country-coded phone and a notes field for preferences/allergies — exactly the fields a salon needs, with character counters and no clutter.
Friction points
  • /reports silently redirects to /dashboard
    The Reports sidebar item routes back to the dashboard (likely gated to a paid tier); a short 'Upgrade to unlock Reports' state would read better than a silent redirect.
  • Onboarding 'Skip setup' drops you mid-wizard with no summary
    Skipping the 8-step setup jumps straight to the calendar; a one-line 'you can finish setup anytime in Settings' toast would reassure new owners.

3 visual changes

Step 22,953 px changed
Before
Before
After
After
Diff
Diff
Step 4705 px changed
Before
Before
After
After
Diff
Diff
Step 5719 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,410 test runs recorded · 1,174 products tested with Lastest

This test was built for beautybind.com — 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.