Back to projects

Case study · Property listing website

PropUser: find your dream property.

A property website where owners list flats, houses, plots and commercial space for sale or rent, and buyers search, save and unlock owner contact details.

Open the live app

01

The problem

  • Buyers and renters search across scattered sources with weak filters, unclear pricing, and listings that are stale or fake.
  • Owners and agents have no low-cost place to list a property with photos and video and know who is interested.
  • When phone numbers are public, owners get spammed and can't tell serious buyers from bots.
  • A buyer who can't find what they want has no way to say what they need and let sellers come to them, and users with a disputed listing have nowhere to raise it.

02

Who it's for

  • Buyers and renters who search, save and unlock owner contact details
  • Owners and vendors who list property for sale or rent. There is no separate vendor role: every user can both list and browse
  • Real-estate agents and businesses who use the Advertise page to see marketing packages
  • Anonymous visitors who can browse, with contact details masked until they log in

03

What it does

Buy and Rent search

Search by text, city, area, type, bedrooms, furnishing and price.

Masked contacts

Contacts stay masked until a logged-in user clicks Unlock, which creates a lead.

List a property

A multi-step form with images, video and amenities. Owners can edit, pause or delete.

Owner dashboard

Listings, views, leads and unlocks, plus matching buyers.

Wanted board

Users post a requirement and sellers with a matching listing can see it.

Grievances and appointments

Raise a complaint or request a call or chat, and follow its status.

04

Architecture

Browser

React + Vite single-page app with 12 public and 6 login-protected routes

Cloudflare Worker

chikuprop serves the app and runs the Hono API under /api

Security check

Login check on every edit, PBKDF2 passwords, 7-day JWT and blocked users rejected

D1 database

SQLite · nine tables · constraints on every enum

Cloudinary and SendGrid

Image and video uploads, and password-reset emails

Daily cron

Deletes notifications older than 90 days at 03:00 UTC

Future note

Planned: a bot check on sign-in, two-step (TOTP) login, audit logs, automatic nightly backups, and a way to download all data.

05

Architecture your way

  • Choose your own tech stack: your database, hosting platform, front end and back end, plus any API or AI integrations your website needs.

Need software like this for your clinic or business?

Tell me how you work today and I’ll build it around your workflow, with your data staying yours.

Tell me your problem