Recording of the visual regression run on api.lkmr.in · LinkMaster — app walkthrough.

In this video· click a step to jump to it

A
Passed

Test recording

LinkMaster — app walkthrough

82,331 ms · 32,937 pixels changed

We built this regression test for api.lkmr.in — it's yours to keep, free.

Take this test with you

This is a real Playwright test, recorded against api.lkmr.in. 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);
  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, 1400); await new Promise(r => setTimeout(r, 350)); await anim(max, 0, 800); })()";

  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 () {});
  await page.route('**/*google-analytics.com/**', function (r) { r.abort(); }).catch(function () {});
  await page.route('**/*googletagmanager.com/**', function (r) { r.abort(); }).catch(function () {});

  // ── 1. Public pricing page (context) ────────────────────────────────────
  stepLogger.log('Public pricing page');
+97 more lines claim the test to get the full code.

Checks run

Run
Visual
53.16%
Text
DOM
Network
+12 −0
Console
A11y
A
Perf
360 over
URL
Variables
Full report
Log in →
32,937
Diff px
1m 22s
Duration
A
Accessible
WCAG 2.2 · 91
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed up with email and password, then drove the signed-in app end to end: built a branded short link with a custom alias, opened the UTM panel, created the link, and walked the links table, QR codes, campaigns, UTM templates, account analytics, the lead pipeline and workspace settings. The surface area is genuinely large for a week-old launch, and the free signup handing over a month of PRO is a strong move. Two things get in the way visually, and one of them shows up in almost every frame of the recording.

Highlights
  • PRO for a month, granted at signup
    The welcome bonus puts every gated feature (device targeting, A/B testing, cloaking, deep links) in reach on the first session. Most tools in this space make you guess what you are buying.
  • The builder shows the whole feature set at once
    UTM tags, password, expiration, scheduled start, click limit, deep links, device and country targeting, cloaking and A/B testing all sit as chips under one form. It reads as a capability list without needing a features page.
  • Settings is unusually complete
    API keys, webhooks, integrations, widget sites and referrals all exist and are reachable, plus a delete-account panel that spells out that shared short links stop working. That warning is the right thing to say and most tools do not say it.
Friction points
  • The floating dock sits on top of the content
    The rounded icon dock is fixed at the bottom centre and overlaps whatever is underneath. On Settings it lands directly over the 'Password' card heading; on the link builder it covers the bottom of the form. Adding bottom padding to the scroll container equal to the dock height would clear it everywhere.
  • The sticky header overlaps the page heading
    On the link builder the translucent top bar sits over the 'Create a short link' heading rather than above it, so the title is half hidden on load. Looks like the header height is not being reserved in the page's top offset.
Couldn't reach
  • /addDomain·Custom-domain setup needs DNS we do not own.
  • Delete account·Screenshotted, never submitted.

12 visual changes

Step 13,139 px changed
Before
Before
After
After
Diff
Diff
Step 248 px changed
Before
Before
After
After
Diff
Diff
Step 3672 px changed
Before
Before
After
After
Diff
Diff
Step 4328 px changed
Before
Before
After
After
Diff
Diff
Step 5489 px changed
Before
Before
After
After
Diff
Diff
Step 625,965 px changed
Before
Before
After
After
Diff
Diff
Step 7309 px changed
Before
Before
After
After
Diff
Diff
Step 8379 px changed
Before
Before
After
After
Diff
Diff
Step 9512 px changed
Before
Before
After
After
Diff
Diff
Step 10390 px changed
Before
Before
After
After
Diff
Diff
Step 1162 px changed
Before
Before
After
After
Diff
Diff
Step 12644 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,846 test runs recorded · 1,040 products tested with Lastest

This test was built for api.lkmr.in — 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.