In this video· click a step to jump to it
Test recording
Postverse — app walkthrough
196,326 ms · 64,789 pixels changed
We built this regression test for postverse.io — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against postverse.io. Claim it into your own workspace and re-run it on every deploy — free.
export async function test(page, baseUrl, screenshotPath, stepLogger) {
const shot = (i, slug) => screenshotPath.replace('.png', '-' + i + '-' + 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, 1400); await new Promise(r => setTimeout(r, 350)); await anim(max, 0, 800); })()";
const UA = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36";
await page.context().setExtraHTTPHeaders({ 'User-Agent': UA });
for (const pattern of ['**/sentry-cdn.com/**', '**/browser.sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/*.posthog.com/**', '**/googletagmanager.com/**', '**/google-analytics.com/**', '**/*.clarity.ms/**', '**/doubleclick.net/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
const dismiss = async function () {
for (const rx of [/^accept$/i, /accept all/i, /got it/i, /allow all/i, /^ok$/i, /skip for now/i, /maybe later/i, /^later$/i, /not now/i, /^close$/i, /^dismiss$/i]) {
await page.getByRole('button', { name: rx }).first().click({ timeout: 1200 }).catch(function () {});
}Checks run
Notes from the demo run
AI-generatedPostverse's signup is a single email field with Google beside it, and Google OAuth dropped us straight onto /dashboard with 50 credits already loaded - no verify-email interstitial, no dead onboarding wall. The in-app surface is coherent: /create is a three-step rail (Persona, Brief, Generate), /campaign pairs hooks with demos, /schedule is a real calendar, and every empty state names the next action instead of showing a blank panel.
- Signup to product in one hopGoogle sign-in landed on /dashboard with 50 credits pre-loaded and a full sidebar. No verify-email step between account creation and the product.
- The create flow tells you where you are/create keeps a persistent 1 Persona / 2 Brief / 3 Generate rail visible, so the hook pipeline reads as a sequence rather than a form.
- Empty states that name the next action/campaign, /schedule and /create all say what to do next ('Create your first campaign to get started') instead of rendering an empty container.
- First-run persona tab is the empty one/create opens on 'Mine', which for a new account reads 'You haven't created any personas yet'. The stock personas live one click away on 'Public'. Defaulting new accounts to Public would give them something to generate from on first paint.
- Settings is mostly a paywall/settings shows only Connected Accounts with TikTok, Instagram and YouTube all marked 'Needs a plan'. A trial user reading it learns what they cannot do; showing profile and preferences alongside would soften the first visit.
- /billing·Payment surface - never entered on a demo run
3 visual changes
Share this run
Proof your app is not AI slop
This test was built for postverse.io — 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.








