In this video· click a step to jump to it
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){Checks run
Notes from the demo run
AI-generatedTally 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.
- The builder IS the pitchOpening 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 costA 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 navDomains is a top-level rail item — publishing a form on your own domain is framed as a core capability, not a buried upgrade.
- Three gates before the builder6-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 emptyA 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
Share this run
Proof your app is not AI slop
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.











