In this video· click a step to jump to it
Test recording
WhisprLive — app walkthrough (authenticated)
57,498 ms · 10,962 pixels changed
We built this regression test for www.whisprlive.live — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.whisprlive.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 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, 300)); await anim(max, 0, 700); })()";
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', '**/browser.sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/www.googletagmanager.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
// ---- 1. Host dashboard (session replayed from localStorage via setup storage_state)
stepLogger.log('1: host dashboard — new session form');
await page.goto(baseUrl + '/dashboard', { waitUntil: 'domcontentloaded' });Checks run
Notes from the demo run
AI-generatedWe created a WhisprLive account, verified the 6-digit code, and then drove the host side end-to-end: picked the Live Event Q&A preset, named a 15-minute session, generated the room, enlarged the join QR, opened live polls, hit the leave-the-room guard, browsed past sessions and the poll library, and came back into the still-running room. From landing on the dashboard to having a live room with a scannable QR and a shareable /ask/ link took about twenty seconds and four clicks. That is the whole pitch and it holds up.
- Four clicks from dashboard to a live roomPreset → title → duration → Generate link, and you have a room code, a QR, a WhatsApp share button and a live message feed. No event object to configure first, no wizard.
- The leave-the-room guard is genuinely thoughtfulNavigating tabs while a session is live raises 'Active session running' with 'Don't worry: your session remains active in your dashboard'. Reassuring the host that leaving the view does not kill the room is exactly the anxiety a presenter has mid-talk.
- Poll templates are framed around the live moment'Prepare your interactive questions beforehand. Launch any draft into an active room with 1 click' — writing polls while presenting is the failure mode, and the empty state names it.
- The guard modal fires on every tab click, not once per sessionMoving Active session → Past sessions → Poll Library raised the same 'Are you sure you want to navigate away' dialog each time. Once per session (or a quiet 'still live' pill in the tab bar, which you already have) would stop it feeling like a nag by the third tab.
- The join QR modal only closes via its own × buttonEscape does not dismiss the Join Scanner modal and neither does a backdrop click. On a projector, mid-talk, a host reaching for Escape and getting nothing is a bad ten seconds. A one-line keydown handler covers it.
- Upgrade / Buy Room Pass·We never walk into a paid checkout on a founder's own product
- /ask/<code> attendee view·Submitting questions would have put test content into a live room
5 visual changes
Share this run
Proof your app is not AI slop
This test was built for www.whisprlive.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.














