Recording of the visual regression run on app.prufa.dev · Prufa — app walkthrough.

In this video· click a step to jump to it

A
Passed

Test recording

Prufa — app walkthrough

52,560 ms · 1,140,080 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against app.prufa.dev. 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,s)=>screenshotPath.replace('.png','-'+n+'-'+(String(s).replace(/[^a-z0-9]+/gi,'-').replace(/^-|-$/g,'').toLowerCase().slice(0,22)||'view')+'.png');
  let idx=1, post=0;
  const cap=async(s,full)=>{ stepLogger.log('Scenario '+idx+': '+s); await page.screenshot({path:shot(idx,s),fullPage:full!==false}); idx++; };
  const accept=async()=>{ await page.getByRole('button',{name:/accept all|got it|^accept$|dismiss|^close$|skip|maybe later|not now|^ok$|continue/i}).first().click({timeout:1200}).catch(function(){}); };
  const backfill=async(entry,MIN)=>{ if(post>=MIN) return; await page.goto(entry,{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForTimeout(1800); const total=await page.evaluate(function(){return Math.max(document.body.scrollHeight,document.documentElement.scrollHeight);}).catch(function(){return 0;}); const vh=await page.evaluate(function(){return window.innerHeight;}).catch(function(){return 900;}); let y=0,seg=1; while(post<MIN && idx<=16 && y<total){ await page.evaluate(function(yy){window.scrollTo(0,yy);},y).catch(function(){}); await page.waitForTimeout(600); stepLogger.log('Scenario '+idx+': overview '+seg); await page.screenshot({path:shot(idx,'overview-'+seg),fullPage:false}); idx++;post++;seg++; y+=Math.floor(vh*0.9); } while(post<MIN && idx<=16){ await page.waitForTimeout(300); await page.screenshot({path:shot(idx,'view-'+seg),fullPage:true}); idx++;post++;seg++; } };
  const APP='https://app.prufa.dev';
  // 1. authed workspace
  await page.goto(APP+'/',{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForLoadState('networkidle',{timeout:7000}).catch(function(){}); await page.waitForTimeout(2500); await accept(); await cap('workspace'); post++;
  // 2. a couple authed nav routes (DOM-discovered)
  const navs=await page.$$eval('nav a[href], aside a[href], [role=navigation] a[href]', function(as){ return as.map(function(a){return a.getAttribute('href')||'';}).filter(function(h){return h.length>1&&!/logout|sign-out|signout|login|register|upgrade|billing|mailto/i.test(h);}); }).catch(function(){return[];});
  const seen={}; for(const h of navs){ if(post>=4)break; const key=h.split('?')[0]; if(seen[key])continue; seen[key]=1; const u=h.startsWith('http')?h:(APP+(h.startsWith('/')?h:'/'+h)); const rr=await page.goto(u,{waitUntil:'domcontentloaded'}).catch(function(){return null;}); if(!rr||!rr.ok())continue; await page.waitForTimeout(1600); await accept(); const sl=h.split('?')[0].replace(/[^a-z0-9]+/gi,'-').slice(-18)||'nav'; await cap('app-'+sl); post++; }
+16 more lines claim the test to get the full code.

Checks run

Run
Visual
100.00%
Text
DOM
Network
+70 −0
Console
A11y
A
Perf
130 over
URL
130 diverged
Variables
Full report
Log in →
1,140,080
Diff px
53s
Duration
A
Accessible
WCAG 2.2 · 100
Review
Fast
Web Vitals

Notes from the demo run

AI-generated

Prufa is an AI QA engineer that runs your real user flows (signup, login, checkout) in a real browser on a schedule and tells you when they break. The signed-in workspace is dense but well-organised: Flows, Monitors, Gremlin (chaos QA), Runs, plus an Agent surface (API keys, MCP server, API docs, agent skill) that makes the whole thing drivable from Claude/Cursor. The 'Run a free audit' box on the landing lets you see value before signing up.

Highlights
  • Agent-native QA
    Exposes an MCP server + API + downloadable agent skill so an AI agent can author and run flows directly — a sharp fit for the 2026 'agent runs your tests' wave.
  • Free audit hook
    The landing's 'Run a free audit' lets a visitor get a result before creating an account — strong lead capture for a QA tool.
  • Gremlin chaos mode
    A dedicated chaos-QA surface (they even blogged about running it on themselves) is a memorable differentiator vs vanilla uptime monitors.
Friction points
  • Dense first-run
    The dashboard surfaces ~11 nav areas at once (Flows, Monitors, Gremlin, Runs, Agent surface, API keys, MCP, docs, account, billing) with no guided 'create your first flow' default — a one-line empty-state CTA would orient new users faster.
  • Guessable deep links 404
    Direct navigation to app routes you haven't visited can 404 rather than redirecting to a sensible default — worth a catch-all.

3 visual changes

Step 6380,246 px changed
Before
Before
After
After
Diff
Diff
Step 7377,932 px changed
Before
Before
After
After
Diff
Diff
Step 8381,902 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,354 test runs recorded · 943 products tested with Lastest

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