Test recording
Curi — app walkthrough
79,714 ms · 0 pixels changed · matches baseline
We built this regression test for www.trycuri.app — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against www.trycuri.app. 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 findings = [];
let actions = 0;
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/**/email-decode.min.js', '**/sentry-cdn.com/**', '**/browser.sentry-cdn.com/**', '**/cdn.segment.com/**', '**/connect.facebook.net/**', '**/*.posthog.com/**', '**/googletagmanager.com/**', '**/google-analytics.com/**']) {
await page.route(pattern, function (r) { r.abort(); }).catch(function () {});
}
// ─── Replay the pre-registered demo session (captured host-side) ───Checks run
Notes from the demo run
AI-generatedCuri delivers exactly what the landing page promises: one word, one fact, two minutes, no lessons. The authed app is deliberately three screens — Home, My Collection, Settings — and that restraint is the product. We walked the daily loop end to end, marked both cards as learned, toggled dark mode and left feedback, all in one recording.
- The product is visible before signupThe marketing page renders the actual word card and fact card for today, with the same 'Got it' affordance the app uses. People know precisely what they're signing up for.
- Scope disciplineThree routes, one daily action, a streak counter. There's no feed, no social layer, no gamification sprawl. For a habit product that's the correct shape, and it's the hardest thing to hold onto.
- Settings asks for feedback where feedback happensAn in-app 'Found a bug, have an idea?' box with 'We read every message' on the settings screen will out-collect a contact form every time.
- Unknown routes render a blank white page instead of a 404 or a redirect/app, /dashboard, /today, /library and /profile all return 200 with an empty body rather than a not-found page or a bounce to /home. Anyone landing on a stale or guessed link sees a white screen and assumes the app is broken. A catch-all that redirects signed-in users to /home fixes all five at once.
- The Google consent screen says the Supabase project ID, not 'Curi'Choosing Continue with Google shows 'to continue to yetfoyuysgqksjwrelow.supabase.co'. At the exact moment someone is deciding whether to trust you with their Google account, they're shown a random hostname. Setting the product name and domain in the Google Cloud OAuth consent config makes it read 'Curi'.
Share this run
Proof your app is not AI slop
This test was built for www.trycuri.app — 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.