Recording of the visual regression run on market4.app · Market4 — app workspace walkthrough.

In this video· click a step to jump to it

M
Passed ✓

Test recording

Market4 — app workspace walkthrough

91,602 ms · 967,526 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against market4.app. 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 APP = '/apps/6ab9e8456be88b777e229026';
  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, 1300); await new Promise(r => setTimeout(r, 300)); await anim(max, 0, 700); })()";

  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*/**', function (r) { r.abort(); }).catch(function () {});

  // ── 1. Public landing (context) ───────────────────────────────────────────
  stepLogger.log('Scenario 1: Market4 landing page');
  await page.goto(baseUrl, { waitUntil: 'domcontentloaded' });
+106 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
85.41%
Text
—
DOM
✓
Network
+1166 −1166
Console
✓
A11y
A
Perf
165 over
URL
539 diverged
Variables
—
Full report
Log in →
967,526
Diff px
1m 32s
Duration
A
Accessible
WCAG 2.2 · 100
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

Market4 is the rare marketing-automation product that leads with restraint rather than reach. We created an account (instant session, no verification wall), added a real app, filled its brand kit, and walked all five workspace sections plus the setup checklist, prompt library, organizations and billing. The consistent theme across every screen is that the product tells you what it is about to spend and what it will not do without asking.

Highlights
  • Every expensive action names its cost before you trigger it
    The index sweep says 'Up to 50 URL-Inspection calls against this property's daily allowance of 2,000 - the same allowance Inspect URL in Search Console draws on. Running it twice is two helpings, not a retry.' That paragraph does more for trust than any pricing page.
  • The automation kill switch is a first-class object
    /settings/organizations has 'Pause automation - stops every outbound action in this organization - publishing, subscriber emails, anything that spends money. Nothing is deleted.' Most tools bury this; you made it the second thing on the page.
  • The dashboard counts permissions, not vanity metrics
    'Publish on their own: 0 / 1' and 'Wait for approval: 1 / 1' as headline tiles. A user can see their blast radius at a glance, which is exactly the right top-level metric for an agent product.
  • Signup to a working workspace in one form
    Name, email, password, then straight into the dashboard with 'Name your first app' waiting. No verification gate, no card.
Friction points
  • Section tabs carry an aria-label that overrides their visible text
    The PUBLISH / LISTEN / MEASURE / GET FOUND / CONFIGURE buttons render that text but expose aria-label='Listen sections', 'Get found sections' and so on. A screen-reader user hears a different label than a sighted user reads, and anything matching on the visible name finds nothing - our first pass clicked them and silently no-opped, producing three identical frames. Dropping the aria-label (the visible text is already a fine name) fixes both.
  • Nothing in the app surfaces the /apps/<id>/insights, /indexing and /feedback routes until a section is expanded
    They are real, fast, well-built pages, but they are two clicks deep behind an accordion that starts collapsed on PUBLISH. A new user's first impression of MEASURE and GET FOUND is a closed row.

3 visual changes

Step 5352,081 px changed
Before
Before
After
After
Diff
Diff
Step 6401,856 px changed
Before
Before
After
After
Diff
Diff
Step 7213,589 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.
57,226 test runs recorded · 1,151 products tested with Lastest

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