In this video· click a step to jump to it
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();Checks run
Notes from the demo run
AI-generatedFold'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.
- Sample-data dashboard pre-populatedBrand-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 skippedStep 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 assetData 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.
- Connect Stripe modal blocks the dashboard on every fresh loadEven 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 404Clicking 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 issueSeveral 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
Share this run
Proof your app is not AI slop
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.





