In this video· click a step to jump to it
Test recording
RequestHarbor — app walkthrough
81,512 ms · 69,963 pixels changed
We built this regression test for requestharbor.com — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against requestharbor.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,s)=>screenshotPath.replace('.png','-'+n+'-'+(String(s).replace(/[^a-z0-9]+/gi,'-').replace(/^-|-$/g,'').toLowerCase().slice(0,22)||'view')+'.png');
const ORIGIN="https://requestharbor.com"; const MINPOST=9;
await page.context().setExtraHTTPHeaders({ 'User-Agent': "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/132.0.0.0 Safari/537.36" }).catch(function(){});
let idx=1, post=0;
const cap=async(s,full)=>{ stepLogger.log('Scenario '+idx+': '+s); await page.screenshot({ path: shot(idx,s), fullPage: full!==false }); idx++; };
const accept=async()=>{ await page.getByRole('button',{name:/^accept$|accept all|got it|dismiss|^close$|skip|maybe later|^ok$|not now/i}).first().click({timeout:1200}).catch(function(){}); };
const is404=async()=>{ const b=await page.locator('body').innerText().catch(function(){return '';}); return /\b404\b|page not found|page you are looking/i.test(b); };
// 1. Public home
await page.goto("https://requestharbor.com",{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForLoadState('networkidle',{timeout:6000}).catch(function(){}); await page.waitForTimeout(1600); await accept(); await cap('home');
// 2. Authed dashboard
await page.goto(ORIGIN+'/dashboard',{waitUntil:'domcontentloaded'}).catch(function(){}); await page.waitForLoadState('networkidle',{timeout:8000}).catch(function(){}); await page.waitForTimeout(3000); await accept(); await cap('dashboard'); post++;Checks run
Notes from the demo run
AI-generatedRequestHarbor is a client-request manager built around one promise: 'one link, clear status, proof of work.' The authenticated app is a full operations suite - a Dashboard overview, Requests, Recurring requests, Clients, reusable Templates, a Calendar, and Reporting/Insights, plus Team and Billing settings. Signup drops you into a 13-day Pro trial with no card required, so an evaluator reaches every feature immediately.
- Full Pro trial, no cardRegistration starts a 13-day Pro trial with full access and no payment method - an evaluator lands in the complete product, not a feature-gated free tier.
- Templates + Recurring modelReusable request Templates plus Recurring requests turn repetitive client asks (monthly assets, renewals) into one-click flows - the clearest expression of the 'proof of work' pitch.
- Obvious core loop'New request', 'Create template' and 'Add client' sit right on the dashboard, so the primary job-to-be-done is discoverable within seconds of first login.
- Sidebar deep-links 404Several sidebar destinations (Recurring, Integrations, Insights, Team, Billing) 404 on direct URL navigation or refresh - they only resolve via in-app clicks. A page reload on those routes drops the user on a 404.
- 12-character password + verify gateSignup enforces a 12-char minimum password and an email-verification step before the dashboard unlocks; reasonable for security, but two extra hurdles before first value.
- /recurring·404 on direct navigation (client-routed only)
- /integrations·404 on direct navigation (client-routed only)
5 visual changes
Share this run
Proof your app is not AI slop
This test was built for requestharbor.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.














