Recording of the visual regression run on www.isitreal.email · isitreal — app walkthrough.

In this video· click a step to jump to it

W
Passed

Test recording

isitreal — app walkthrough

72,106 ms · 4,548 pixels changed

We built this regression test for www.isitreal.email — it's yours to keep, free.

Take this test with you

This is a real Playwright test, recorded against www.isitreal.email. 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, 1300); 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' });
  await page.route('**/cdn-cgi/scripts/**', function (r) { r.abort(); }).catch(function () {});

  // ── Public context: home ────────────────────────────────────────────────
  stepLogger.log('Scenario 1: Public home page');
  await page.goto(baseUrl, { waitUntil: 'domcontentloaded' });
  await page.waitForLoadState('networkidle', { timeout: 6000 }).catch(function () {});
  await page.locator('h1, main').first().waitFor({ state: 'visible', timeout: 8000 }).catch(function () {});
+82 more lines claim the test to get the full code.

Checks run

Run
Visual
10.37%
Text
DOM
Network
Console
A11y
A
Perf
80 over
URL
Variables
Full report
Log in →
4,548
Diff px
1m 12s
Duration
A
Accessible
WCAG 2.2 · 95
B
Fast
Web Vitals · 85

Notes from the demo run

AI-generated

We signed in with the magic link, created an API key, and ran live checks through the playground against both a disposable address and a real corporate one, then walked Rules, Usage, Billing and Docs. The playground is the best argument for this product: one paste returns the verdict card, the full JSON with every signal, and the exact curl to copy, side by side. Seeing '[email protected]: BLOCK, decided by L2_blocklist, 1ms' next to '[email protected]: ALLOW, decided by L4_model, 355ms, category financial, confidence 0.96' explains the layered architecture better than the docs page does.

Highlights
  • The playground sells the product in one paste
    Verdict card, full JSON response and a ready-to-copy curl all render together, and the copy says it runs against the live API and counts toward quota. No mock, no sandbox caveat. That honesty is rare and it is your strongest conversion surface.
  • The layer that decided is surfaced, not hidden
    decided_by comes back as L2_blocklist or L4_model with a latency figure, so an evaluator can see the cheap path short-circuit at 1ms before the model is ever called. That is the whole value proposition made visible.
  • Docs are served as plain text at /llms.txt for agents
    The docs page says the whole API is two endpoints and is also served at /llms.txt so an agent can read it. For a product whose buyers are increasingly AI coding agents, that is exactly the right move.
Friction points
  • Your magic-link email landed in spam
    The sign-in link from noreply@ arrived in the Gmail spam folder, with the subject 'Sign in to project-86911195467 requested at...'. That subject is the raw Firebase project id, not your product name. For a product whose entire job is email deliverability and trust, a spam-foldered sign-in link with a project-id subject line is the worst possible first impression. Setting a sender name and a custom subject in the Firebase email template is a five-minute fix.
  • The quota badge reads 'FREE 0 LEFT' while checks still succeed
    Every dashboard page shows a 'FREE 0 LEFT' pill from the first second of a brand-new account, yet the playground ran four live checks for us without complaint. A new user reads that badge as 'I have no credits' before they have tried anything.

5 visual changes

Step 2106 px changed
Before
Before
After
After
Diff
Diff
Step 579 px changed
Before
Before
After
After
Diff
Diff
Step 679 px changed
Before
Before
After
After
Diff
Diff
Step 84,255 px changed
Before
Before
After
After
Diff
Diff
Step 929 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.
56,888 test runs recorded · 1,049 products tested with Lastest

This test was built for www.isitreal.email — 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.