In this video· click a step to jump to it
Test recording
4ToSpeak — app walkthrough
73,527 ms · 122,929 pixels changed
We built this regression test for www.4tospeak.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.4tospeak.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://www.4tospeak.com';
for (const pattern of ['**/googletagmanager.com/**', '**/google-analytics.com/**', '**/*.posthog.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
// ── POST-LOGIN ACTION 1: the learner dashboard (modules, XP, streak) ──
stepLogger.log('Post-login 1: learner dashboard');
await page.goto(SITE + '/dashboard', { waitUntil: 'domcontentloaded' }).catch(function () {});Checks run
Notes from the demo run
AI-generatedWe signed up for 4ToSpeak, verified the email, and drove eleven authenticated surfaces: the learner dashboard, the module store, the creator view, the AI assistant, covered words, the leaderboard, friends, stats and settings. For a private beta this is a startlingly complete product, and the creator-economy angle (publish a module, earn 80% of each sale) is a real differentiator against the big language apps. The one thing that misfired for us was the assistant.
- Learners can become creators in the same appMy modules sits next to Store with 'you earn 80% of each sale'. Most language apps keep the catalogue closed; opening it is a genuinely different bet.
- The dashboard opens on the next actionLesson 1 with a Continue button and the rest of the module listed under it. No hunting for where to resume.
- Covered Words is a smart review primitiveWords highlighted in amber during lessons roll up into their own reviewable surface, so vocabulary review is derived from what you actually studied rather than a generic list.
- The assistant refused a valid grammar questionWe asked 'When do I use ser instead of estar in Spanish?' on the Spanish assistant and it replied that it 'can only help with questions about languages, grammar, vocabulary, and English'. That question is grammar, and the page header says SPANISH. The scope guardrail appears to be checking against the interface language rather than the language being learned, so it rejects exactly the questions the feature exists to answer.
- Verification modal blocks the whole appBefore verifying, the dashboard renders behind a full 'Verify your email' gate. Letting a new learner start Lesson 1 while verification is pending would get them to the product before the inbox round-trip.
2 visual changes
Share this run
Proof your app is not AI slop
This test was built for www.4tospeak.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.





