Recording of the visual regression run on dnsaudit.io · DNSAudit.io — app walkthrough.

In this video· click a step to jump to it

D
Passed ✓

Test recording

DNSAudit.io — app walkthrough

83,486 ms · 2,336 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against dnsaudit.io. 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/**', '**/browser.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: DNSAudit.io home');
  await page.goto(baseUrl + '/', { waitUntil: 'domcontentloaded' });
+87 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
1.06%
Text
—
DOM
✓
Network
—
Console
✓
A11y
B
Perf
99 over
URL
✓
Variables
—
Full report
Log in →
2,336
Diff px
1m 23s
Duration
B
Accessible
WCAG 2.2 · 80
A
Fast
Web Vitals · 100

Notes from the demo run

AI-generated

We drove DNSAudit.io end-to-end as a signed-in user: Google sign-in, then the dashboard, a live scan of cloudflare.com, the full DNS & Domain Security report, and every asset and API surface in your sidebar. The product reads as unusually finished for a 1.3 release: the free-tier comparison table on /register tells a visitor exactly what changes when they sign up, the dashboard fills itself in with real grades while background scans finish, and the report page puts DNS Security and Domain Exposure side by side instead of collapsing them into one number.

Highlights
  • The /register comparison table
    Your signup page shows the no-account vs free-account limits row by row (3 vs 10 scans, 50 vs 100 subdomains, no history vs 14 days). That is the clearest signup justification we have captured on a demo this month; most tools just say 'sign up for free'.
  • Two scores, not one
    cloudflare.com came back B 80/100 DNS Security and A+ 100/100 Domain Exposure. Splitting them is the right call: a domain can be exposed without being misconfigured, and a single blended grade would have hidden that.
  • Portfolio fills in asynchronously
    We added lastest.cloud and 'Rows fill in on their own as each background scan finishes. No refresh needed.' held true. The grade, issue counts, DNSSEC state and expiry (146d) all landed without us reloading.
  • Onboarding does not block the product
    Add-a-domain, the role question and the plan summary each took one click and dropped us straight into My Domains. No modal we had to fight.
Friction points
  • Sidebar items are buttons, not links
    My Domains / Top Issues / Scan History are <button> elements that push the route rather than anchors. They work, but they cannot be middle-clicked into a new tab, right-click-copied, or crawled, and screen readers announce them as buttons rather than navigation. Swapping them for <a href> keeps the same handler and fixes all three.
  • The scan report drops out of the app shell
    Running a scan from /dashboard lands on /scan/<domain>, which renders the public marketing chrome (Docs / API / Blog / About) instead of your dashboard sidebar. A signed-in user loses their nav mid-workflow and has to use the back button to get to Scan History. Rendering the report inside the dashboard layout when authenticated would keep the loop closed.

4 visual changes

Step 11,729 px changed
Before
Before
After
After
Diff
Diff
Step 2223 px changed
Before
Before
After
After
Diff
Diff
Step 3223 px changed
Before
Before
After
After
Diff
Diff
Step 11161 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,226 test runs recorded · 1,151 products tested with Lastest

This test was built for dnsaudit.io — 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.