Skip to content

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

Node.jsExpressMongoDBMongooseEJSPassportCloudinaryLeaflet

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.