In this video· click a step to jump to it
Test recording
mockintervew — app walkthrough
57,863 ms · 10,680 pixels changed
We built this regression test for mockintervew.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against mockintervew.com. 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, 1200); await new Promise(r => setTimeout(r, 250)); await anim(max, 0, 700); })()";
const SITE = 'https://mockintervew.com';
for (const pattern of ['**/googletagmanager.com/**', '**/google-analytics.com/**', '**/*.posthog.com/**', '**/cdn.segment.com/**', '**/browser.sentry-cdn.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
// ── POST-LOGIN ACTION 1: authed dashboard ──
stepLogger.log('Post-login 1: dashboard (authed landing)');
await page.goto(SITE + '/dashboard', { waitUntil: 'domcontentloaded' }).catch(function () {});Checks run
Notes from the demo run
AI-generatedWe signed into mockintervew with a fresh account and drove the full loop: onboarding, the dashboard, the three question-set paths on /interview/new, a resume upload, and an interview start. The product reads as genuinely finished for a solo build, the onboarding is six well-paced questions rather than a wall of settings, and the three ways to get a question set (curated role, pasted job description, resume) is a smart structure. The clearest snag is what happens when someone types a role you do not curate yet.
- Three entry paths, one screenCurated role, pasted job description, and resume-grounded questions all sit side by side on /interview/new. A candidate never has to guess which one they qualify for.
- Onboarding respects the user's timeSix steps, every one skippable, and the resume step explicitly says 'Optional, and you can add it later'. We reached the dashboard in under a minute.
- Honest empty stateThe dashboard says 'No completed interviews yet' with a direct 'Start your first mock interview' nudge instead of showing fake sample charts.
- Uncurated roles dead-end the primary CTAWe typed 'Backend Engineer' and pressed Start interview. Instead of an interview we got 'We don't have a question set for Backend Engineer yet'. The recovery panel is good, but the role field accepts free text with no hint that only 14 roles are curated. An autocomplete on the Role input, or a note under it listing the covered roles, would stop the dead-end before the click.
- Company and question-count reset on that re-renderAfter the uncurated-role bounce, the form came back with Company repopulated as 'Backend Engineer' and the count changed from the 5 we set to 6. Preserving what the user typed across that re-render keeps the retry to one click.
3 visual changes
Share this run
Proof your app is not AI slop
This test was built for mockintervew.com — 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.








