Recording of the visual regression run on app.gymsly.fit · gymsly — app walkthrough.

In this video· click a step to jump to it

A
Passed ✓

Test recording

gymsly — app walkthrough

129,919 ms · 16,973 pixels changed

We built this regression test for app.gymsly.fit — it's yours to keep, free.

Take this test with you

This is a real Playwright test, recorded against app.gymsly.fit. 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`);
  async function settle() {
    await page.waitForLoadState('networkidle', { timeout: 3000 }).catch(function () {});
    await page.waitForTimeout(1200);
  }
  async function routeBlock() {
    const pats = ['**/cdn-cgi/scripts/**/email-decode.min.js','**/sentry-cdn.com/**','**/browser.sentry-cdn.com/**','**/cdn.segment.com/**','**/connect.facebook.net/**','**/*.google-analytics.com/**','**/*.googletagmanager.com/**'];
    for (const p of pats) { await page.route(p, r => r.abort()).catch(function () {}); }
  }
  const SCROLL = "(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,600); })()";
  async function contentLen() { return await page.evaluate(() => (document.querySelector('main, [role="main"]') || document.body).innerText.trim().length).catch(() => 0); }
+80 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
38.42%
Text
—
DOM
✓
Network
+750 −720
Console
✓
A11y
A
Perf
150 over
URL
✓
Variables
—
Full report
Log in →
16,973
Diff px
2m 10s
Duration
A
Accessible
WCAG 2.2 · 95
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed into Gymsly as 'Demo Fitness Club' and walked the full gym-operations surface: the dashboard leads with four revenue cards (today / week / month / year), then membership-expiry and overdue-payment panels — a genuinely well-organised operator cockpit. The left rail is comprehensive (Members, Classes, Access Control, Billing, Finance, Staff & Payroll, CRM, Broadcasts, Member Portal, Inventory, Analytics) and every route we opened rendered its own populated layout rather than a stub.

Highlights
  • Operator-first dashboard
    Revenue at four time horizons plus expiring-memberships and overdue-payments panels are the first thing an owner sees — exactly the numbers a gym runs on, no dashboard-clutter.
  • Breadth of modules
    Access Control, Staff & Payroll, Member Portal and Inventory in one product is unusually complete for an indie gym SaaS — it reads as a full back-office, not an MVP.
Friction points
  • Trial banner reads '938 days left'
    The free-trial countdown shows 938 days — almost certainly a seeded/demo value; on a real account that number would undercut urgency. Worth pinning to the true trial length.
  • Empty-state currency lock
    All revenue cards render ₹0.00 with no way to switch currency from the dashboard — fine for an INR-first launch, but a visible currency toggle would help the first non-INR operator.

10 visual changes

Step 143 px changed
Before
Before
After
After
Diff
Diff
Step 243 px changed
Before
Before
After
After
Diff
Diff
Step 343 px changed
Before
Before
After
After
Diff
Diff
Step 443 px changed
Before
Before
After
After
Diff
Diff
Step 543 px changed
Before
Before
After
After
Diff
Diff
Step 643 px changed
Before
Before
After
After
Diff
Diff
Step 7439 px changed
Before
Before
After
After
Diff
Diff
Step 843 px changed
Before
Before
After
After
Diff
Diff
Step 943 px changed
Before
Before
After
After
Diff
Diff
Step 1016,190 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,525 test runs recorded · 1,174 products tested with Lastest

This test was built for app.gymsly.fit — 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.