Recording of the visual regression run on dashboard.rankbull.io · RankBull - app walkthrough.

In this video· click a step to jump to it

D
Passed ✓

Test recording

RankBull - app walkthrough

134,898 ms · 111,421 pixels changed

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

Take this test with you

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

export async function test(page, baseUrl, screenshotPath, stepLogger) {
  const APP = baseUrl.replace(/\/+$/, '');
  const WWW = 'https://rankbull.io';
  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, 1200); await new Promise(r => setTimeout(r, 250)); await anim(max, 0, 600); })()";

  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' });
  for (const pattern of ['**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/googletagmanager.com/**', '**/browser.sentry-cdn.com/**']) {
    await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
  }

  const settle = async function (ms) {
+114 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
7.15%
Text
—
DOM
✓
Network
—
Console
14 new
A11y
A
Perf
224 over
URL
28 diverged
Variables
—
Full report
Log in →
111,421
Diff px
2m 15s
Duration
A
Accessible
WCAG 2.2 · 100
Review
Fast
Web Vitals

Notes from the demo run

AI-generated

We created a free account, ran the free AI visibility scan on our own domain, completed dashboard onboarding, and walked the whole tracked-site workspace: Overview, Prompts, Citations, Competitors, Brands, Keywords, Articles, Site Health and the Agent. The free report is the strongest thing you have built. It came back in under a minute with a real grade, the verbatim buyer questions, the hosts the engines actually cited, and a clean split between AI visibility and site readiness. The dashboard shell is equally tidy. The gap is between the two: once inside, a free workspace cannot save anything, and it does not say so.

Highlights
  • The free report earns the signup on its own
    Grade D, 34 of 100, 0 of 10 answers, with the six hosts ChatGPT and Gemini cited instead. Splitting 'AI visibility 0' from 'site readiness 85' is the insight - it tells a founder the site is fine and the presence is not.
  • Signup is a single screen and auto-sessions
    Email, password, confirm, and we were in. No verification email, no code, no tour. For a tool people try on impulse after a scan, that is exactly right.
  • Engine coverage is honest about the free tier
    ChatGPT and Gemini scanned, then Perplexity, Claude, Grok and AI Overviews each explicitly marked 'Not scanned - unlocks with tracking'. Showing the locked rows beats hiding them.
  • Twelve genuinely free tools with no signup
    AI crawler checker, llms.txt generator, schema markup, Core Web Vitals. That is a real top-of-funnel asset, not a thin content play.
Friction points
  • Adding a prompt fails silently on a free workspace
    Type a prompt, the Add prompt button is enabled, click it, and nothing happens: the dialog stays open, the list stays at zero, and no message appears. The console shows the real reason - ConvexError code WORKSPACE_LOCKED from tracking/prompts:createPrompt. Surfacing that error text as a toast, or disabling the button with an 'upgrade to track prompts' label, turns a broken-feeling app into a clear upsell. Same behaviour on Add competitor.
  • Overview sends you to a dead end
    The empty Overview offers 'Set up prompts' as its only call to action, which lands on the Prompts screen where saving is locked. The one action the empty state recommends is the one a free workspace cannot complete.
Couldn't reach
  • checkout.dodopayments.com·Paid licence checkout - never exercised

4 visual changes

Step 181,345 px changed
Before
Before
After
After
Diff
Diff
Step 229,525 px changed
Before
Before
After
After
Diff
Diff
Step 4544 px changed
Before
Before
After
After
Diff
Diff
Step 87 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
a11y
WCAG AA
regressions
0
Badges stay live, ratchet upward, only downgrade on confirmed regression.
57,300 test runs recorded · 1,174 products tested with Lastest

This test was built for dashboard.rankbull.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.