Recording of the visual regression run on goalmatic.io · Goalmatic — app walkthrough.

In this video· click a step to jump to it

G
Passed ✓

Test recording

Goalmatic — app walkthrough

152,428 ms · 2,518,802 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against goalmatic.io. 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 + '-' + s + '.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, 1100); await new Promise(r => setTimeout(r, 280)); await anim(max, 0, 650); })()";
  const DISMISS_OVERLAYS = "(() => { let n = 0; const dc = document.querySelectorAll('.driver-popover-close-btn, [aria-label=\"Close\"]'); for (const b of dc) { b.click(); n++; } const btns = [...document.querySelectorAll('button')]; for (const b of btns) { const t = (b.innerText || '').trim(); if (/^(skip|skip tour|got it|dismiss|maybe later|not now|finish|done|×)$/i.test(t)) { b.click(); n++; } } document.body.classList.remove('driver-active'); const ov = document.querySelector('.driver-overlay, svg.driver-overlay'); if (ov && ov.parentNode) ov.parentNode.removeChild(ov); const pop = document.querySelector('.driver-popover'); if (pop && pop.parentNode) pop.parentNode.removeChild(pop); return n; })()";
  const AGENT_ID = '79cd74c8-0059-4c19-a9bf-fd20b0e0bf21';

  await page.context().setExtraHTTPHeaders({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' });
  for (const pattern of ['**/cdn-cgi/scripts/**', '**/sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/*.posthog.com/**', '**/amplitude.com/**', '**/google-analytics.com/**', '**/googletagmanager.com/**']) {
    await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
  }

  stepLogger.log('Public: Goalmatic home');
+103 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
100.00%
Text
—
DOM
✓
Network
+418 −418
Console
✓
A11y
C
Perf
517 over
URL
✓
Variables
—
Full report
Log in →
2,518,802
Diff px
2m 32s
Duration
C
Accessible
WCAG 2.2 · 77
Review
Fast
Web Vitals

Notes from the demo run

AI-generated

We registered with the email-OTP flow on goalmatic.io and drove your workspace end to end: dashboard, the Build Anything composer, Agents, an agent detail page, Workflows, the Integration library, Marketplace, Apps and Account settings. The composer plus the three starter chips is the best thing on the page. It answers 'what do I do first' before the user has to ask, and the credits panel keeps the cost of each run visible while you build.

Highlights
  • The empty state is a prompt, not a wall
    'Build Anything — type what you want to build and your builder will build it for you' with Track my gym workouts / Track my monthly spending / Build me a daily logger. A brand-new workspace has something to click in under two seconds.
  • Credits are always on screen
    The sidebar pins 30 credits available plus Flow Runs 0/100, Flows 0/10, Agents 0/10. Usage-based products usually bury this until the first bill.
  • Integration library explains the payoff
    'Connect once, then use your tools across agents, workflows, and installed apps' does more work than a logo grid would.
Friction points
  • The first-run tour covers the thing it is describing
    The driver.js popover for step 1 of 10 lands directly on top of the Build Anything input, so the highlighted feature is hidden behind the tooltip explaining it. Offsetting the popover below the card, or highlighting without overlaying, would fix it. We had to close it to capture the composer at all.
  • Sidebar labels and routes disagree
    The sidebar reads Workflows and Explore but the routes are /flows and /marketplace, and the intuitive guesses /workflows and /explore both return a hard 404. A redirect pair is a one-line fix and saves anyone who types the label they just read.
Couldn't reach
  • /tables·Trimmed to keep the recording inside the run budget.

7 visual changes

Step 2826,949 px changed
Before
Before
After
After
Diff
Diff
Step 3823,821 px changed
Before
Before
After
After
Diff
Diff
Step 4821,797 px changed
Before
Before
After
After
Diff
Diff
Step 543 px changed
Before
Before
After
After
Diff
Diff
Step 6269 px changed
Before
Before
After
After
Diff
Diff
Step 745,764 px changed
Before
Before
After
After
Diff
Diff
Step 8159 px changed
Before
Before
After
After
Diff
Diff

Share this run

Earned · Lastest awards

Proof your app is not AI slop

LASTEST
starter
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 goalmatic.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.