Recording of the visual regression run on meragpt.com · meraGPT — app walkthrough.

In this video· click a step to jump to it

M
Passed

Test recording

meraGPT — app walkthrough

53,932 ms · 18,143 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against meragpt.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 STAMP = Date.now().toString(36).slice(-5);
  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' });

  const type = async (loc, text) => {
    await loc.click();
    await page.keyboard.press('Control+A').catch(function () {});
    await page.keyboard.press('Backspace').catch(function () {});
    await loc.pressSequentially(text, { delay: 12 });
+105 more lines claim the test to get the full code.

Checks run

Run
Visual
16.88%
Text
DOM
Network
Console
A11y
A
Perf
URL
Variables
Full report
Log in →
18,143
Diff px
54s
Duration
A
Accessible
WCAG 2.2 · 100
A
Fast
Web Vitals · 100

Notes from the demo run

AI-generated

We signed into meraGPT with Google and drove the whole console end to end: the usage dashboard, creating a real scoped API key, the credits page, and all three models in the playground. The thing that stands out is how much the product refuses to hide. The playground tells you the exact price before you run anything ('$0.03 / 1M in. Nothing is generated, so there is no output charge'), the key form makes a lifetime spend cap and a model allowlist first-class fields rather than buried settings, and the empty dashboard names the exact failure you will hit ('402 insufficient_credit') instead of showing a generic zero state. For a developer evaluating an API, that is unusually low-friction.

Highlights
  • The key form is the best part of the product
    Creating a key lets you set a lifetime USD cap and restrict it to specific models in the same dialog. Our key came out as 'Restricted to: state-decider-1, $0.00 / 30.00'. Most API products make you discover per-key limits after a surprise bill.
  • Your empty states name the actual error
    The dashboard says the balance is empty so requests return 402 insufficient_credit, and links straight to Add credit. That is a far better zero state than 'No data yet' because it pre-answers the support ticket.
  • Price is shown at the point of action
    The playground states the per-token cost inline above the run button once you are signed in. Showing cost where the spend happens, not on a separate pricing page, removes the main hesitation for a first call.
Friction points
  • /keys and /credits 404 instead of redirecting
    The nav links correctly point at /dashboard/keys and /dashboard/credits, but the shorter /keys and /credits both render your 404 page. Anyone typing the obvious URL or following an old link lands on 'Nothing lives here'. Two redirects in next.config.js fixes it.
  • The playground Decide button gives no feedback at $0 balance
    With an empty balance we typed a valid state + two questions, clicked Decide, and the DECISIONS panel stayed on its placeholder with no error. The dashboard already explains 402 insufficient_credit, so surfacing that same message in the results panel would close the loop.
Couldn't reach
  • /dashboard/credits checkout·Selected the $50 tier to show the flow but stopped before Stripe. We never complete a purchase on a founder's product.

6 visual changes

Step 33,247 px changed
Before
Before
After
After
Diff
Diff
Step 42,665 px changed
Before
Before
After
After
Diff
Diff
Step 52,787 px changed
Before
Before
After
After
Diff
Diff
Step 62,787 px changed
Before
Before
After
After
Diff
Diff
Step 72,787 px changed
Before
Before
After
After
Diff
Diff
Step 83,870 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
a11y
WCAG AA
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
56,903 test runs recorded · 1,054 products tested with Lastest

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