Recording of the visual regression run on columns.live · Columns.live — app walkthrough.

In this video· click a step to jump to it

C
Passed ✓

Test recording

Columns.live — app walkthrough

85,604 ms · 370,573 pixels changed

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

Take this test with you

This is a real Playwright test, recorded against columns.live. 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 SHEET = '/sheets/4d56d1b6-fec4-49b6-9df6-deec4a6479fb';
  const STAMP = Date.now().toString(36);
  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' });
  for (const pattern of ['**/cdn-cgi/scripts/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/www.googletagmanager.com/**']) {
    await page.route(pattern, function (r) { return r.abort(); }).catch(function () {});
  }

  // ---------- Public context: home ----------
+77 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
8.54%
Text
—
DOM
✓
Network
+1452 −1408
Console
✓
A11y
A
Perf
407 over
URL
✓
Variables
—
Full report
Log in →
370,573
Diff px
1m 26s
Duration
A
Accessible
WCAG 2.2 · 93
C
Fast
Web Vitals · 70

Notes from the demo run

AI-generated

We signed up with email and password, pasted five rows of company data, asked two judgment questions as column headers and watched Columns evaluate every row with a confidence number attached. End to end, from landing page to judged spreadsheet, was under two minutes with no email verification step in the way. The thing that makes the product read as trustworthy is the confidence column: every answer carries a score and a 'review below 72%' threshold slider, so the output is a triage list rather than a black box you have to spot-check by hand.

Highlights
  • The landing page spreadsheet is live
    'The spreadsheet below is live - edit any cell in it' is literally true. A visitor can exercise the core mechanic before creating an account, which is the single best thing an AI tool can do for conversion and still rare.
  • Confidence is first-class, not a footnote
    Each judgment writes an answer and a conf bar, the header summarises '3 confident / 0 need review / 2 not judged yet', and a slider sets the review threshold. That turns 5,000 rows into a short list of ones to check, which is the actual promise in your h1.
  • Usage is legible before it bites
    /usage shows 5 / 500 row-questions with a per-sheet breakdown and states plainly that the warning fires at 80%. A row-question is defined in one sentence. Usage-based billing usually arrives as a surprise; this does not.
  • Signup drops you straight into the work
    Create account lands on /sheets with the CSV dropzone and a paste box, no onboarding wizard, no 'connect an integration' wall. Three products we tried this week made us connect a third-party account before showing anything.
Friction points
  • The header still shows SIGN IN / START FREE right after signup
    Immediately after creating an account and landing on /sheets, the top-right of the page still read 'SIGN IN START FREE' while the sheet list below was already showing our data. The header caught up on a later load. For a first-time user that is a moment of 'did my signup actually work?' at exactly the wrong time - the auth state just needs to reach the header on the same render as the redirect.
  • A running job leaves one row un-judged with no explanation
    On a 5-row run the counter settled at '4 confident, 0 need review, 1 not judged yet' and the last row showed a bare dot rather than an answer or an error. The row eventually resolves, but during the run there is no per-row state that says 'queued' versus 'failed'. A pending indicator on the cell would stop people re-running and spending row-questions twice.

10 visual changes

Step 1231,393 px changed
Before
Before
After
After
Diff
Diff
Step 2221 px changed
Before
Before
After
After
Diff
Diff
Step 317,336 px changed
Before
Before
After
After
Diff
Diff
Step 418,424 px changed
Before
Before
After
After
Diff
Diff
Step 518,603 px changed
Before
Before
After
After
Diff
Diff
Step 618,545 px changed
Before
Before
After
After
Diff
Diff
Step 723,780 px changed
Before
Before
After
After
Diff
Diff
Step 823,061 px changed
Before
Before
After
After
Diff
Diff
Step 10171 px changed
Before
Before
After
After
Diff
Diff
Step 1119,039 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
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 columns.live — 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.