In this video· click a step to jump to it
Test recording
Statsy — app walkthrough
157,821 ms · 6,747 pixels changed
We built this regression test for statsy.co — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against statsy.co. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const SITE = baseUrl + '/s/YAdU45I5ji';
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' });
await page.route('**/cdn-cgi/scripts/**', function (r) { r.abort(); }).catch(function () {});
await page.route('**/sentry-cdn.com/**', function (r) { r.abort(); }).catch(function () {});
await page.route('**/connect.facebook.net/**', function (r) { r.abort(); }).catch(function () {});
// ── Scenario 1: public home ───────────────────────────────────────────────
stepLogger.log('Scenario 1: Statsy marketing home');Checks run
Notes from the demo run
AI-generatedWe signed up for Statsy with a fresh account, confirmed the email, added a site and then drove the whole workspace: the site picker, Overview, Live, the install screen with the Next.js snippet selected, Revenue, Goals, Funnels, Journeys, Replays, Heatmaps, Search & AI, Reports and API tokens. Thirteen authenticated surfaces, all reachable without a card. The thing that stands out is how much of the product is decided before the first pageview arrives - the signup flow already shows what the dashboard will look like with data in it.
- The onboarding shows a populated dashboard, not an empty oneWhile the site is still being added, the background renders a full sample workspace - 49,470 visitors, $103.8K revenue, channels ranked by revenue with ChatGPT already in the list. An evaluator sees the product working in the first ten seconds instead of a zero state.
- Revenue attribution is the headline, and the copy commits to it"Google sent 14,300 people. The newsletter sent 2,140 and made more money." That sentence does more positioning work than the feature list, and the Revenue tab actually backs it.
- Install screen speaks to how people actually deployHTML / Next.js / WordPress / Shopify / Webflow / Framer / Tag Manager tabs plus a "Copy prompt for AI" button for Claude Code and Cursor. Meeting people where they already work is a small touch most analytics tools skip.
- The Live view never settles, which breaks automated capture/live polls continuously, so a full-page capture against it times out at 15s where every other route finishes in two. Real visitors will not notice, but any screenshot service, PDF export or preview-image job pointed at Live will hang the same way. Pausing the poll when the tab is idle would fix both.
- Empty reports do not point back to the snippetGoals, Funnels, Journeys, Replays and Heatmaps each render their own empty state, but only Overview carries the "Check installation" button. A new user who clicks straight into Funnels sees nothing and no next step.
- /account/billing checkout·Stopped at the trial view - we never start a paid flow on a founder's product.
3 visual changes
Share this run
Proof your app is not AI slop
This test was built for statsy.co — 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.








