EUNICE M. Get in Touch
Back to Projects

Full Stack · Real Estate

FindAHome

A real estate platform that connects house hunters, landlords and agents without the fraud that makes online property hunting miserable. Django REST backend with four distinct roles, admin verification gates and a moderation queue; React 19 and TypeScript on the front.

Django Django REST Framework SimpleJWT django-allauth React 19 TypeScript Tailwind 4 Vite Framer Motion

Demo status: the React front end is deployed on Vercel so you can walk the interface, but the Django API isn't hosted yet — listings stay empty until the backend runs. Local setup steps are at the bottom of this page.

find-a-home-self.vercel.app Open

Live embed of the deployed app. If it doesn't load in your browser, open it in a new tab.

Platform at a glance

The interesting work here is authorisation: four roles that see genuinely different systems.

4 User roles Admin, agent, landlord, hunter
RBAC Access model Enforced in DRF permissions
2-tier Verification Auto vs. admin-approved
5 Backend apps Users, listings, more
JWT Auth SimpleJWT + allauth
React 19 Front end TypeScript + Tailwind 4

The Problem

Online property hunting in Kenya has a trust problem. Listings are posted for houses that were let months ago, deposits are collected for properties the poster doesn't control, and the same photos appear under three different agents. House hunters end up paying viewing fees to find out.

Fixing that isn't a UI problem, it's an authorisation problem: who is allowed to post, who has been verified to do it, and what happens when a listing is reported.

My Role

Sole developer across both halves. I designed the role and permission model, built the DRF API with its verification gates and moderation flow, and built the React front end that consumes it.

  • Role & permission design
  • DRF API and serializers
  • Verification & moderation flow
  • React + TypeScript front end
  • Vercel deployment

System structure

A Django REST backend of focused apps, and a Vite-built React client that talks to it over JWT.

users

Custom user model, the four roles, and the verification state each one carries.

listings

Property records, ownership rules, active/verified flags and report handling.

listing reports

Users flag listings as fake or unavailable; admins resolve them from a queue.

recommendations

Matches hunters to listings with its own permission boundaries.

chatbot

Conversational assistant for search and questions about a listing.

frontend

React 19, TypeScript, Tailwind 4 and Framer Motion, bundled by Vite.

Engineering decisions

Permissions live in the API, not the UI

Each app ships its own DRF permission classes. Hiding a button in React is a courtesy; the server refusing the request is the actual rule.

Asymmetric verification

House hunters are auto-verified because the risk they pose is low. Agents and landlords — the roles that can publish and take money — wait for an admin. Friction is applied where the fraud actually happens.

Reporting as a first-class model

A flagged listing creates a report record with a reason and a resolution state, so moderation has a queue and a history rather than an inbox.

Soft flags over deletion

Listings carry is_active and is_verified rather than being removed. A moderator can reverse a mistake, and the audit trail survives.

Battle-tested auth stack

dj-rest-auth, django-allauth and SimpleJWT instead of a hand-rolled login. Authentication is the last place to be inventive.

Separate front end

The React client is deployed independently of the API, so the interface can ship without redeploying the backend — and a second client could reuse the same API unchanged.

Run it locally

Two terminals: the Django API and the Vite dev server.

Backend — Django REST

git clone https://github.com/Eunice-ctrlz/Find-a-home.git
cd Find-a-home
python -m venv .venv && source .venv/bin/activate
pip install -r requirements.txt
python manage.py migrate
python manage.py createsuperuser
python manage.py runserver

API on localhost:8000. The superuser is what verifies agents and landlords.

Frontend — React 19

cd frontend
npm install
npm run dev

Vite serves the client on localhost:5173.

Want a walkthrough of the code?

I'm happy to talk through the architecture or the decisions above — and I build systems like this for other people too.