Journey
A full-stack vacation-rental marketplace built with Node.js, Express and MongoDB, featuring authentication, listing CRUD, reviews, image uploads and interactive maps.
2026 · Solo · Shipped
The problem
I wanted to move beyond tutorial-level backend work and build a complete application around a real database, authentication and user-generated content. Journey is an Airbnb-style marketplace where users can browse stays, create listings, upload images, leave reviews and view listings on a map.
What I built
- Solo: I designed and built the complete MEN-stack application myself — EJS views, Express routes, middleware, controllers, Mongoose models and utility functions, with MongoDB Atlas as the primary data store.
- Built listing CRUD flows with owner-only edit and delete authorization.
- Implemented signup, login and logout using Passport Local and persistent MongoDB-backed sessions.
- Added image uploads through Multer and Cloudinary.
- Added Joi validation for listing and review input.
- Implemented user reviews with author-level deletion controls.
- Added category filtering across listings.
- Integrated Geoapify geocoding and stored GeoJSON coordinates for map display.
- Added interactive listing maps using Leaflet and MapLibre.
- Deployed the application on Render with MongoDB Atlas.
Architecture
Browser → EJS views → Express routes → Middleware → Controllers → Mongoose models → MongoDB Atlas
Image upload → Multer → Cloudinary Location → Geoapify → GeoJSON coordinates → Leaflet / MapLibre
I separated routing, middleware, controllers, models and utility functions so the application could grow without keeping all backend logic inside app.js.
What I learned
Journey was my first serious backend-focused project where I had to connect the pieces instead of following isolated tutorials. I learned how authentication, authorization, sessions, validation, file uploads, database relationships, third-party APIs and deployment interact inside one application. I also learned that most backend problems are not about writing an individual route — they are about keeping data flow, permissions and error handling correct across the whole system.
Journey is the project that moved my backend knowledge from individual tutorials to a complete application. It became the foundation for the more complex full-stack and AI systems I built afterward.
Results and evaluation
- Status
- Solo project · Shipped
- Deployment
- Hosted on Render with MongoDB Atlas.
- Core flows tested
- Authentication · Listing CRUD · Reviews · Image uploads · Geocoding · Maps
What I'd change
Next steps
- Better loading and error states.
- Stronger automated testing.
- Improved mobile UX.
- More robust image handling.
- More production-oriented observability.