EVRION.
Haven & Finch — main project image

Web Platform · Real Estate

A real-estate listings platform with a list/map split, a multi-stage filtering pipeline, mortgage estimates, saved favorites, and an authenticated admin area for CRUD and image upload.

Project
Haven & Finch
Year
2025
Discipline
Full-Stack Web
Stack
React · Express · SQLite

Context

Browsing property is a fundamentally spatial task — people want to see where a listing actually is, not just read its address. Haven & Finch is built around a list-and-map split where the two stay in sync as you search.

It's a full product: browse and filter listings, open detail pages with a gallery, compare options, estimate a mortgage, save favorites, and submit an inquiry — plus an authenticated admin side for managing the catalog.

Challenge

Real-estate filtering is deceptively deep: price, beds, baths, type, and location all compose, and the map and the list have to reflect the same filtered set without drifting out of sync or re-fetching the world on every keystroke.

It also needed a clean separation between a public browsing experience and a protected admin area that can create, edit, and upload images for listings — two very different surfaces over one dataset.

Approach

The client runs a single filtering pipeline that feeds both the list and the MapLibre GL map, so panning, filtering, and selecting all operate on one consistent result set. Favorites and compare are first-class, and a mortgage estimator turns a price into a monthly number on the spot.

The server is a focused Express API over SQLite that seeds 45 listings and an admin user on first run, with JWT auth protecting the admin routes and multer handling image uploads. The two halves run together with one command.

Outcome

The platform delivers the whole loop a property site needs: search and filter, a synced list/map view, rich detail pages with galleries, favorites, compare, mortgage math, and inquiries — backed by an admin who can manage everything behind a login.

Because it seeds itself on first run, the entire two-workspace app comes up with realistic data from a single `npm run dev`.

Technical Detail

Client: React + Vite, Tailwind CSS v4, React Router, and MapLibre GL JS for the interactive map. Server: Node + Express with SQLite via better-sqlite3, JWT auth, and multer for uploads.

A workspace setup wires the two together — `concurrently` runs the API on :4000 and the Vite client on :5173, with the client proxying `/api` and `/uploads` to the server.

// Gallery

List & map split, kept in sync as you search
List & map split, kept in sync as you search
Property detail with gallery & mortgage estimate
Property detail with gallery & mortgage estimate
Saved favorites
Saved favorites

// Next step

The next case study could be yours. Tell us what you're building and we'll tell you honestly how we'd ship it.