In this video· click a step to jump to it
Test recording
Open House Rentals — signed-in renter walkthrough
88,362 ms · 62,507 pixels changed
We built this regression test for openhouserentals.org — it's yours to keep, free.
Take this test with you
This is a real Playwright test, recorded against openhouserentals.org. 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_TO = (n) => "(async () => { const ease = t => 1 - Math.pow(1 - t, 3); const target = window.innerHeight * " + n + "; const from = window.scrollY; 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(from, target, 1100); await new Promise(r => setTimeout(r, 450)); })()";
// ─── Scenario 1: signed-in experience chooser ─────────────────────────────
stepLogger.log('Scenario 1: Signed-in welcome — two connected experiences');
await page.goto(baseUrl + '/welcome', { waitUntil: 'domcontentloaded' });
await page.getByText('Enter Open House Rentals').first().waitFor({ state: 'visible', timeout: 25000 });
await page.waitForTimeout(1800);
await page.screenshot({ path: shot(1, 'signed-in-welcome'), fullPage: true });
// ─── Scenario 2: the rental search surface ────────────────────────────────Checks run
Notes from the demo run
AI-generatedWe signed into Open House Rentals with Google and drove the renter journey end to end: the two-experience welcome, Find Rentals, a location search, a listing, the Genesis renter-confidence panel, saving to Favourites, the saved-homes list, the Genesis leasing concierge (including a real grounded question), open houses and vacancy alerts. The thing that stands out is how much of the fair-housing discipline is written into the UI rather than buried in a policy page.
- Genesis actually stays groundedWe asked for the cheapest verified rental with pets. It answered only from OHR inventory, listed both verified options with prices in a Decision context panel, and said it would flag anything OHR cannot verify instead of filling in the blanks. Most AI concierges in this category will happily invent a pet policy.
- Fair-housing guardrails are in the interface'Genesis does not make screening decisions, infer protected characteristics, or invent missing housing facts' sits directly under the composer, and the language picker says 'Your language choice is personalization, not a housing-screening signal.' That is the right place for it.
- The confidence score rates the listing, not the renter68/100 NEEDS CLARITY with an explicit 'this is not an applicant score, eligibility decision or prediction about you'. Scoring decision-clarity instead of people is a genuinely good product decision in this space.
- Favourites has three names and one of them 404sThe header links to /my-rentals, the saved-homes page lives at /saved-listings, and /favorites - the URL a visitor is most likely to guess - returns your 404 page. One canonical route with redirects from the other two is a small change that removes a dead end.
- The header on /find-rentals says 'Sign In' while you are signed inReproducible on the same session: /find-rentals renders 'Switch Experience · OHR Lens · Sign In', while /listing/... renders 'Favorites · Vacancy alerts'. Two header variants disagree about auth state, and the search page - your highest-traffic page - is the one that looks logged out.
- /favorites·404 - real route is /saved-listings
2 visual changes
Share this run
Proof your app is not AI slop
This test was built for openhouserentals.org — 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.





