Recording of the visual regression run on tally.so · tally — app walkthrough.

In this video· click a step to jump to it

T
Passed ✓

Test recording

tally — app walkthrough

63,903 ms · 2,960 pixels changed

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

Take this test with you

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

export async function test(page, baseUrl, screenshotPath, stepLogger) {
  const CFG = {"appEntry":"/dashboard","publicMaxNav":0,"fullPage":true,"steps":[{"goto":"/dashboard","dismiss":true,"waitMs":2000,"label":"dashboard-home"},{"goto":"/templates","waitMs":2200,"label":"template-gallery"},{"goto":"/forms/create","waitMs":3500,"label":"form-builder-new"},{"fill":[{"sel":"[data-placeholder=\"Form title\"], [placeholder=\"Form title\"], [contenteditable=\"true\"]","value":"Lastest customer feedback","seq":true}],"waitMs":1800,"label":"form-title-typed"},{"fill":[{"sel":"textarea[placeholder=\"Ask me anything\"]","value":"How likely are you to recommend us to a friend?","seq":true}],"waitMs":2000,"label":"first-question-typed"},{"goto":"/domains","waitMs":1800,"label":"domains"},{"goto":"/settings","waitMs":1800,"label":"workspace-settings"},{"goto":"/roadmap","waitMs":1600,"label":"roadmap"},{"goto":"/dashboard","waitMs":1600,"label":"dashboard-with-form"}]};
  const shot = function(i, s){ return screenshotPath.replace('.png', '-' + i + '-' + s + '.png'); };
  page.setDefaultTimeout(6000);
  // single combined noise-abort route (1 action instead of ~10)
  await page.route(function(u){ return /sentry|segment\.com|googletagmanager|google-analytics|hotjar|posthog|connect\.facebook|cdn-cgi\/scripts/.test(u.toString()); }, function(r){ r.abort().catch(function(){}); }).catch(function(){});
  let n = 1;
  const FP = CFG.fullPage !== false;
  const GOTO = 11000;
  const wait = function(ms){ return page.waitForTimeout(ms||500); };
  const dismiss = async function(){ const d = page.getByRole('button', { name: /skip|dismiss|maybe later|not now|got it|close|no thanks|continue|get started/i }).first(); if (await d.isVisible().catch(function(){return false;})) { await d.click({ timeout:2000 }).catch(function(){}); await wait(400); } };
  const clickByText = function(src){ return page.evaluate(function(s){
+55 more lines — claim the test to get the full code.

Checks run

Run
✓
Visual
5.41%
Text
—
DOM
✓
Network
+77 −77
Console
✓
A11y
Review
Perf
77 drift
URL
✓
Variables
—
Full report
Log in →
2,960
Diff px
1m 04s
Duration
Review
Accessible
WCAG 2.2
A
Fast
Web Vitals · 100

Notes from the demo run

AI-generated

Tally is a form builder that works like a doc — type to build, no code, unlimited forms and submissions on the free tier. Auth is a 6-digit email code → complete-profile → workspace. The authenticated app is clean and Notion-like: a left rail (Home / Search / Members / Domains / Settings / Templates), a template gallery, and a document-style form builder where the title and questions are just editable blocks you type into. The "forms as docs" promise is immediately obvious the moment the builder opens.

Highlights
  • The builder IS the pitch
    Opening a new form drops you into a doc with a "Form title" heading and an "Ask me anything" question block — typing a title and a question feels exactly like writing a doc, which is the whole differentiator, and it's legible in three seconds.
  • Template gallery lowers the blank-page cost
    A full template gallery sits one click from the dashboard, so a first-timer has a path that isn't an empty builder.
  • Custom domains on the nav
    Domains is a top-level rail item — publishing a form on your own domain is framed as a core capability, not a buried upgrade.
Friction points
  • Three gates before the builder
    6-digit code → complete-profile (name + password) → workspace question step run before the builder appears; each is short but the code-entry step means an inbox hop before first value.
  • Fresh workspace is empty
    A new account has no forms, so the dashboard opens on a "No forms yet" empty state; the template gallery softens this but a sample form would show the product working on first paint.

4 visual changes

Step 1893 px changed
Before
Before
After
After
Diff
Diff
Step 2893 px changed
Before
Before
After
After
Diff
Diff
Step 10587 px changed
Before
Before
After
After
Diff
Diff
Step 11587 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,333 test runs recorded · 1,174 products tested with Lastest

This test was built for tally.so — 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.