A full-stack web platform that connects students with house owners for finding, booking, and paying for rental housing.
Overview
Finding affordable student housing usually means scattered Facebook posts and phone calls. This platform puts the whole rental process in one place. Owners list houses, students search and book them, and admins oversee the system. Payments, renewals, and tenancy tracking are built in.
Key features
For students
- Search and filter houses by division, district, room type, gender preference, rent range, and facilities
- Detail pages with image galleries and related-house suggestions
- Save favorites and book a house online
- Secure online payment through Stripe Checkout
- Rental history, manual renewal, and an auto-renew option
-
For house owners
- Post and manage listings with multi-image upload (images are auto-resized and optimized)
- Track seat availability, bookings, tenants, earnings, and recent activity
- See student bookings, payments, and renewals on their own dashboard
-
For admins
- Analytics dashboard with platform statistics
- Moderate listings and choose which houses are featured on the home page
- Manage users, including a per-user activity view and a guarded delete
- Manage newsletter subscribers
-
Platform-wide
- Role-based access for students, house owners, and admins, each with its own dashboard
- Email-based password reset
- Scheduled jobs for the tenancy and auto-renew lifecycle
- Seat accounting that only shows houses with free capacity
- Responsive UI
Tech stack
Frontend: Next.js 16 (App Router), React 19, Tailwind CSS v4, shadcn/ui, nuqs (URL-based filters), React
Backend: Node.js, Express 5, REST API
Database: MongoDB with Mongoose 9
Authentication: Auth JWT with httpOnly cookies, bcrypt password hashing
Payments: Stripe
Others: Multer and Sharp for image upload and optimization, Nodemailer for email, node-cron forcscheduling, PDFKit for PDF generation
DevOps: Docker and Docker Compose, pnpm
Architecture highlights
- A monorepo with a separate client/ and server/.
- The backend is split into modules (auth, users, properties, bookings, tenancy, payment, favorites, subscribers, dashboard, uploads), each with its own model, service, controller, and routes.
- The frontend does all data access through Next.js Server Actions, so tokens never reach browser JavaScript.
- A reusable query builder gives every list endpoint the same search, filter, sort, and pagination.
- The design includes use case and activity diagrams for booking and payment, renewal, reporting, and search.
