Full-stack web application
RentIt
A full-stack, live platform where people rent items to each other.
Project interface

Home1 / 9
Overview
RentIt is a platform where people can rent out items they do not use to others nearby. The whole rental runs inside the app: listing an item, request and approval, payment from a wallet, handover with a code, return and rating.
I built it as my graduation project between October 2025 and May 2026. It covers every layer, from the interface and the database to the recommendation service and deployment.
What I built
Rental lifecycle
Every rental moves through a 12-step flow: request, approval, payment, handover, in rental, return and completion, with disputes and cancellations built in. If two people try the same action at once, a database lock lets only one of them through.
Wallet and payments
The balance is not a single number but the sum of transaction records, and refunds are new records rather than deletions. Even if a Stripe payment is delivered twice, it is credited to the wallet only once.
Secure handover and return
A one-time code, photo/video proof from both sides and a review window protect each handover; when the window ends the system moves the flow on by itself, and an admin resolves disputes.
Location-based search
With PostGIS, listings are filtered and sorted by distance, combined with category and price filters.
Personalised recommendations
A separate Python service combines content similarity, distance, similar users' behaviour and items rented together to produce recommendations; results are stored in the database so the API reads them fast. New users see popular nearby listings.
Real-time messaging
Renter and owner chat in real time with Socket.io, with a typing indicator and unread counter.
Security and tests
JWT and Google sign-in, rate limiting, input validation and ownership checks on every endpoint. I wrote more than 100 automated tests with Jest and Supertest.
Technologies
Frontend
- Next.js 15pages, routing and server-side rendering
- React 19interface components
- Tailwind CSS 4styling
- Zustandclient state
- Leafletmaps
Backend
- Node.jsruntime
- ExpressREST API
- JWTsession and authentication
- bcryptpassword hashing
- Passport (Google OAuth)sign in with Google
- Socket.ioreal-time messaging
- Helmetsecurity headers
- Rate limitingrequest limiting
- express-validatorinput validation
- Winstonlogging
Database
- PostgreSQL 15relational data, parametrised SQL without an ORM
- PostGISgeospatial queries
Machine learning
- Pythonrecommendation service
- pandasdata processing
- scikit-learnrecommendation model
- SciPynumerical computing
Services
- Stripe Checkoutpayments
- Brevoemail
- Twilio Verifyphone verification
- Cloudflare R2image storage
Infrastructure and testing
- RenderAPI
- Vercelfrontend
- Supabasedatabase
- Jestautomated tests
- SupertestAPI tests
Status
The live demo is public. Payments run in Stripe test mode and phone verification in demo mode; listings and users are sample data.







