In this video· click a step to jump to it
Test recording
LiveTrans — app walkthrough
56,716 ms · 0 pixels changed · matches baseline
We built this regression test for livetrans.net — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against livetrans.net. 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, s) => screenshotPath.replace('.png', '-' + n + '-' + s + '.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, 1100); await new Promise(r => setTimeout(r, 280)); await anim(max, 0, 650); })()";
await page.context().setExtraHTTPHeaders({ 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36' });
for (const pattern of ['**/cdn-cgi/scripts/**', '**/sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/*.posthog.com/**', '**/google-analytics.com/**', '**/googletagmanager.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
stepLogger.log('Authed 1: dashboard — entitlements and remaining translation time');
await page.goto(baseUrl + '/dashboard', { waitUntil: 'domcontentloaded' });
await page.getByText('Remaining translation time').first().waitFor({ state: 'visible', timeout: 25000 }).catch(function () {});Checks run
Notes from the demo run
AI-generatedWe registered with the emailed 6-digit code, signed in, and drove the whole account area: entitlements, history, orders, plans, invite friends, a drafted support ticket, account security, a live usage refresh and the signed-in pricing page. The dashboard leads with the number that actually matters to a trial user, 30m 0s remaining of 30m 0s, and the entitlement table explains where that time came from and when it expires. For a product whose engine lives in a Chrome extension, the web account area carries its weight.
- The trial is quantified, not vagueRemaining translation time, total quota, percent used and 'Never expires' all on the first authed screen. A trial user knows exactly what they have without reading a pricing page.
- Referral terms are stated in full, up frontInvite Friends spells out the 30-minute trial for both sides and the 5-minutes-of-use threshold before a reward card is issued. No asterisk, no 'terms apply'.
- Support is in-product with a category pickerSubmit Ticket sits next to My Tickets and a conversation pane, so a user reports a problem without leaving the account area or hunting for an email address.
- Every tab shares the Entitlements subtitleHistory, Orders, Plans, Invite Friends, Support and Account all render 'Review translation usage, buy more time, and manage account settings.' under their own heading. On Support it reads as if you are in the wrong place. Per-tab subtitles would cost one string each.
- Signup succeeds then drops you at a login formAfter the code is verified you get 'Registration successful! Please sign in.' and have to retype the email and password you just entered. Signing the user in on the session you already verified removes a whole step.
- Submit Ticket·We drafted a real ticket for the recording but deliberately did not submit it; filing a support ticket would have put a fake issue in the founder's queue.
Share this run
Proof your app is not AI slop
This test was built for livetrans.net — 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.