RentSaver
Apartment hunting means juggling a dozen browser tabs, copy-pasting addresses into notes apps, and losing track of listings before you can revisit them. RentSaver solves the chaotic part: one click saves any rental listing to a persistent dashboard where you can compare, annotate, and track availability across every major platform.
The system is a monorepo with three moving parts. A Chrome Extension (Manifest V3, vanilla JS) reads live listing pages — including authenticated Facebook Marketplace pages that can't be scraped from a server — and extracts structured property data via platform-specific extractors. A Railway-hosted Playwright scraper handles server-side extraction for platforms that allow it. A Next.js 15 web app backed by Firebase Auth and Firestore serves as the dashboard: saved properties sync in real time, an availability checker polls listings for status changes, and a side-by-side comparison view lets you evaluate listings without reopening tabs.
Currently in active beta on the Chrome Web Store. Early testers exposed real edge cases fast — Facebook's bot detection, Kijiji's lazy-loaded images, false-positive availability checks — and the extraction layer has been progressively hardened. The dual-extractor architecture (browser-side vs. server-side) turned out to be the right call: it's the only way to cover authenticated platforms without requiring users to hand over credentials.
The project also doubles as a full product build: it has a marketing site, a design system grounded in a single token file, and an internal Marketing HQ dashboard for launch planning. Building the whole stack solo meant making deliberate scope calls — several nice-to-haves (root layout refactor, full mobile paste-link support, the "request a site" popup button) are documented and deferred rather than half-shipped.