Recording of the visual regression run on www.usefold.io · usefold — app walkthrough.

In this video· click a step to jump to it

W
Passed ✓

Test recording

usefold — app walkthrough

26,448 ms · 1,005,995 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against www.usefold.io. Claim it into your own workspace and re-run it on every deploy — free.

export async function test(page, baseUrl, screenshotPath, stepLogger) {
  const AUTHED_PATH = '/onboarding';
  const BUSINESS_INTERACTIONS = [{slug:'describe-business',input:{labels:['describe','business','company','website','url','what'],placeholders:['describe','business','company','website','url','what does','paste','https']},value:'Lastest — free visual regression testing for web apps that catches UI bugs before each deploy',cta:{names:[/skip scan/i,/continue/i,/next/i,/analy[sz]e/i,/save/i,/^done$/i,/get started/i]}}];
  const shot = (n, slug) => screenshotPath.replace('.png', `-${n}-${slug}.png`);
  const settle = () => page.waitForLoadState('networkidle', { timeout: 12000 }).catch(() => {});
  const acceptCookies = async () => { const b = page.getByRole('button', { name: /accept|allow all|got it|agree|ok$/i }).first(); if (await b.isVisible().catch(() => false)) await b.click().catch(() => {}); };
  const dismissModal = async () => { const b = page.getByRole('button', { name: /skip|dismiss|maybe later|not now|got it|close|^continue$|set up manually/i }).first(); if (await b.isVisible().catch(() => false)) await b.click({ timeout: 2500 }).catch(() => {}); };

  // ── Public phase ──
  stepLogger.log('Scenario 1: Homepage');
  await page.goto(baseUrl, { waitUntil: 'domcontentloaded' });
  await acceptCookies(); await settle();
+63 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
100.00%
Text
—
DOM
✓
Network
+84 −84
Console
✓
A11y
—
Perf
54 drift
URL
✓
Variables
—
Full report
Log in →
1,005,995
Diff px
26s
Duration
—
Accessible
A
Fast
Web Vitals · 100

Notes from the demo run

AI-generated

Fold's hero ('You're spending on ads that might be losing money') leads with revenue risk, not feature claims, which is unusually direct for a SaaS landing page. The signup flow runs Supabase email+password with a confirmation gate, then a clean 3-step onboarding wizard (website URL, business profile, connect data), then drops straight into a sample-populated dashboard so a brand-new visitor can see what the product is for before doing any work. Once inside, the sidebar exposes 9 distinct surfaces (Overview, Analytics, Fix-It Playbooks, Growth, Customers, AI Advisor, Data Sources, Settings, Advanced) with 14 integration providers ready to wire in.

Highlights
  • Sample-data dashboard pre-populated
    Brand-new accounts land on an Overview with $10.2K revenue, 3.5K sessions, $57.8K ad spend, 93 new customers, CAC $621, +69% / +59% / +62% deltas. A 'DEMO Viewing sample data. Connect real integrations to see live metrics.' banner sets expectations cleanly. This is a textbook empty-state, evaluators get the product before they commit data.
  • AI Advisor is a real surface, not a marketing claim
    /dashboard?tab=ai renders a 'Daily AI Insight' panel with Focus-goal chips (Grow MRR, Reduce Churn, Scale Ads), a Generate Insight button, and a chats panel — it's wired up before any data is connected. The 'Live Data Context' pill in the corner is a strong trust signal for a tab that's often vapor in competing products.
  • Onboarding wizard can be skipped
    Step 1 of 3 (paste website URL) has a 'Skip' link and a 'Skip scan — enter description manually' button. The wizard does not gate access to the dashboard, which is the right call — most evaluators want to peek at /dashboard before describing their business.
  • Integration catalog is the asset
    Data Sources tab shows 14 platforms across Payments & Revenue (4), Web Analytics (3), Advertising (1), Email & Marketing (4), Stores (2). Clear category tabs, search bar at the top, 'Not connected' status pills on each row. This is the page evaluators will spend the most time on.
Friction points
  • Connect Stripe modal blocks the dashboard on every fresh load
    Even after dismissing it with 'Maybe later — show me where to connect', a hard reload of /dashboard re-asserts the modal. For evaluators bouncing between tabs and pages this means dismissing it repeatedly. A session-scoped or once-per-day dismiss would smooth the first hour of evaluation.
  • Tab navigation uses query params but direct URLs 404
    Clicking the Analytics sidebar button routes to /dashboard?tab=analytics, which works. But a deep link to /analytics (or /advisor / /customers) returns a 404. Founders sharing 'check our AI Advisor at /advisor' from chat will hit a dead end. Either redirect the bare paths to /dashboard?tab=... or make them first-class routes.
  • /blog has a 2026-05-29 publication date issue
    Several blog cards show 'May 25, 2026' which is 4 days in the future from when this run was captured. Likely a placeholder-content date or a timezone issue in the publish-date renderer.

2 visual changes

Step 1502,997 px changed
Before
Before
After
After
Diff
Diff
Step 6502,998 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,604 test runs recorded · 1,174 products tested with Lastest

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