In this video· click a step to jump to it
Test recording
ProgrammerNeeds — app walkthrough
83,921 ms · 32,164 pixels changed
We built this regression test for programmerneeds.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against programmerneeds.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 = (n, slug) => screenshotPath.replace('.png', '-' + n + '-' + 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, 300)); await anim(max, 0, 700); })()";
const ctx = page.context();
page.setDefaultTimeout(12000);
await ctx.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/**', '**/*.doubleclick.net/**', '**/googletagmanager.com/**']) {
await page.route(pattern, function (r) { r.abort().catch(function () {}); }).catch(function () {});
}
Checks run
Notes from the demo run
AI-generatedWe signed in to ProgrammerNeeds with Google and drove the maker side of the product: the submission form filled out end to end, the leaderboard's all-time/month/week filters, and directory search. The single-page submit form is the best part — everything a listing needs is on one screen with live character counters and no multi-step wizard, exactly as the landing page promises.
- The submission form keeps its promise'One page, one review, no submission fee' is literally true — name, tagline, description, category, pricing, tags, URL, repo, demo video and images are all on one screen with live counters and inline examples.
- Submission status is shown before you start'3 of 3 product slots free / 2 of 2 submissions left today' sits above the form, so a maker knows the quota before investing effort.
- Signed-in state is unambiguousThe header swaps to the account email immediately after the OAuth round-trip, with no flash of logged-out UI.
- No email sign-up path at allSign-in is GitHub or Google only. That is fine for a dev directory, but it silently excludes anyone who keeps work and Google accounts separate — an email fallback is usually a cheap add on Supabase.
- The sticky header floats into the middle of the submit pageOn the long /submit page the nav bar detaches and renders over the form body partway down rather than staying pinned to the viewport top. Visible in the walkthrough recording at the submission step.
3 visual changes
Share this run
Proof your app is not AI slop
This test was built for programmerneeds.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.








