Full-stack · Case study
A production-deployed property marketplace for buyers, sellers, renters, agents and admins, with listings, viewings, rental applications and real-time messaging.

- Role
- Design, full-stack build, deployment
- Stack
- React · Redux Toolkit · Node.js · Express · MongoDB · Socket.IO · Jest · Docker
- Highlights
- 5 user roles · Real-time messaging · Jest + Supertest API tests · CI, Docker, deployed
01 / Context
The problem
A property marketplace has to serve people with very different goals: buyers and renters searching, sellers and agents managing listings, and admins keeping the platform trustworthy. Each of them needs its own tools without the product splitting into separate apps.
02 / Scope
What I built
- 01Five roles (buyer, seller, renter, agent, admin) with role-specific dashboards and role-based route protection on the client and the API.
- 02Sale and rental listings with photos, filters and a multi-step listing wizard, plus admin review before a listing goes live.
- 03Socket.IO messaging with typing indicators, read receipts, online status and live notifications.
- 04Rental applications, viewing scheduling and open houses, a wishlist, property comparison and a mortgage calculator.
- 05Seller analytics (views, saves, inquiries per listing) and admin moderation of users, listings and reports.
03 / Engineering
Decisions and trade-offs
- 01Session tokens live in an httpOnly, Secure cookie so page JavaScript can never read them; cookie-authenticated writes require an X-Requested-With header as CSRF protection.
- 02All input is stripped of MongoDB operators, search patterns are escaped, page sizes are capped, and login, registration and contact are rate-limited.
- 03The same JWT and role middleware protects both the REST API and the WebSocket server, so real-time features follow the same access rules as everything else.
- 04API behaviour is covered by Jest and Supertest against an in-memory MongoDB, run in GitHub Actions on every push.
- 05Shipped with Docker Compose for local setup and deployed with the frontend on Vercel, the API on Render and data on MongoDB Atlas.
04 / Screens
Inside the product




Outcome
A complete, deployed marketplace
The platform is live with seeded demo accounts for every role, so the whole journey can be tried end to end: from searching and saving a property, to messaging the owner and booking a viewing, to an admin approving the listing.
Next case study
Fluks Dekor