Recording of the visual regression run on app.betterretain.com · BetterRetain — app walkthrough.

In this video· click a step to jump to it

A
Passed ✓

Test recording

BetterRetain — app walkthrough

47,751 ms · 3,241 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against app.betterretain.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, s) => screenshotPath.replace('.png', `-${n}-${s}.png`);
  const ORIGIN = new URL("https://app.betterretain.com/app/dashboard").origin;
  page.setDefaultTimeout(8000);
  page.setDefaultNavigationTimeout(22000);
  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' }).catch(function(){});
  // block heavy third-party noise: speeds networkidle + removes console-error reds
  for (const pat of ['**/client.crisp.chat/**','**/widget.intercom.io/**','**/*.intercomcdn.com/**','**/js.stripe.com/**','**/*.sentry-cdn.com/**','**/*.sentry.io/**','**/cdn.segment.com/**','**/*.hotjar.com/**','**/*.fullstory.com/**','**/connect.facebook.net/**','**/googletagmanager.com/**','**/google-analytics.com/**','**/cdn-cgi/scripts/**/email-decode.min.js']) {
    await page.route(pat, function(r){ r.abort().catch(function(){}); }).catch(function(){});
  }
  // Scenario 1: public hero
  await page.goto("https://betterretain.com", { waitUntil: 'domcontentloaded' });
+94 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
0.08%
Text
—
DOM
✓
Network
+18 −9
Console
✓
A11y
Review
Perf
162 over
URL
✓
Variables
—
Full report
Log in →
3,241
Diff px
48s
Duration
Review
Accessible
WCAG 2.2
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

BetterRetain drops you straight into a recovery dashboard after signup (no email-verify gate) with a focused left rail: Dashboard, Recover Now, Stripe Accounts and Recovery Logs. It's a tight, single-purpose tool for clawing back failed Stripe subscription payments.

Highlights
  • Zero-friction onboarding
    Signup auto-sessions straight into the app dashboard with no verify wall, so an evaluator sees the product immediately.
  • Single-purpose clarity
    Four nav items, one job (recover failed subs); the information architecture doesn't make you hunt for the core action.
Friction points
  • Empty until Stripe is connected
    Every screen is a zero-state until you link a Stripe account; a seeded sample dataset would demonstrate value before connecting.

Visual change

Step 13,241 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,761 test runs recorded · 1,174 products tested with Lastest

This test was built for app.betterretain.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.