Recording of the visual regression run on uniurl.app · UniUrl — app walkthrough.

In this video· click a step to jump to it

U
Passed ✓

Test recording

UniUrl — app walkthrough

92,706 ms · 462,123 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against uniurl.app. 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, 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' });
  for (const pattern of ['**/cdn-cgi/scripts/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/www.googletagmanager.com/**']) {
    await page.route(pattern, function (r) { return r.abort(); }).catch(function () {});
  }

  // ---------- Public context: home ----------
  stepLogger.log('Public: UniUrl home');
  await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
+87 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
100.00%
Text
—
DOM
✓
Network
+88 −44
Console
✓
A11y
A
Perf
1276 over
URL
11 diverged
Variables
—
Full report
Log in →
462,123
Diff px
1m 33s
Duration
A
Accessible
WCAG 2.2 · 100
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed up for UniUrl with email and password, confirmed via the link you mail out, then drove the whole control panel as a real user: built a board, added tiles, flipped the desktop/mobile preview, opened Analytics, Links, Apps, Promote and Account, published the board and loaded the live page. The editor is the strongest part: tile type, size, background palette and share card all live on one screen with no save button to hunt for, and the header keeps a running SAVED / DRAFT state so you always know where you stand.

Highlights
  • Seventeen tile types, one picker
    App, Founder Bio, Project, Link, Writing, Repository, Social, Contact, Media, Video, Statement, Now, Publication, Open to, Proof, Shipped, Capture. That vocabulary is the product's real differentiator against a generic link list, and it is one click deep.
  • The share card is generated, not an afterthought
    Every tile gets its own 1200x630 card and a direct link (uniurl.app/lastestdemo/new-link) the moment it exists, with an optional override for wording and image. Most link-in-bio tools make you screenshot your own page.
  • The embed badge ships three framework snippets
    HTML, React/Next.js and WordPress, with light/dark/signature variants and a live preview against a chosen background. It reads like you expect people to actually install it, not just admire it.
  • Editing saves as you type
    Tile title, description and destination all persisted without a save action, and the header flipped to SAVED on its own. We never lost an edit across ten navigations.
Friction points
  • An owner's own unpublished URL 404s at them
    Before we published, visiting uniurl.app/lastestdemo while signed in as the owner returned the public 'That page is not on UNIURL' 404, even though the header right above it says uniurl.app/lastestdemo and the account clearly owns it. A new user who copies their handle out of the header and pastes it in a browser will conclude signup failed. Rendering a 'this board is still a draft, publish it' state for the owner instead of the stranger's 404 is a small branch with a large first-run payoff.
  • Publish only exists inside Preview
    There is no Publish control on /control itself - the only path is the Preview link in the header, which opens the draft view where the button lives. The DRAFT pill in the header looks like a status label rather than the thing standing between you and a live page. Making that pill the publish affordance would close the loop where users already look.

10 visual changes

Step 2128,196 px changed
Before
Before
After
After
Diff
Diff
Step 33,452 px changed
Before
Before
After
After
Diff
Diff
Step 4146,188 px changed
Before
Before
After
After
Diff
Diff
Step 5152,761 px changed
Before
Before
After
After
Diff
Diff
Step 6966 px changed
Before
Before
After
After
Diff
Diff
Step 7876 px changed
Before
Before
After
After
Diff
Diff
Step 8876 px changed
Before
Before
After
After
Diff
Diff
Step 9876 px changed
Before
Before
After
After
Diff
Diff
Step 108,445 px changed
Before
Before
After
After
Diff
Diff
Step 1119,487 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.
57,226 test runs recorded · 1,151 products tested with Lastest

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