I built WanderLust as a full stack web application that allows users to discover, share, and manage vacation rentals in a way that feels modern, secure, and reliable. My goal was to create a platform that balances scalability, security, and user experience, ensuring consistent performance as the application grows.
From an architectural standpoint, I structured the project using the MVC pattern and enforced data integrity with Joi validation schemas to prevent malformed inputs. For authentication, I implemented multi-strategy Passport.js, supporting both Local and Google OAuth logins to give users secure and flexible access. The application is deployed on Render, backed by MongoDB Atlas for cloud database management, and integrates Cloudinary for scalable, optimized image hosting and delivery.
To enhance usability, I incorporated real-time geolocation with Google Maps API and geocoding, allowing listings to be displayed with precise coordinates. Combined with an intuitive interface, these features make WanderLust not just technically robust but also user-centered — a project that demonstrates both engineering depth and thoughtful design.
- 🌐 Live Site: WanderLust on Render
- 💻 GitHub Repository: View Repo
🔒 Enterprise-Level Authentication: I implemented multi-strategy authentication with Passport.js, supporting both Local and Google OAuth 2.0 logins. User sessions are managed with Express-Session, signed and encrypted cookies, and securely persisted in MongoDB Atlas via Connect-Mongo. Combined with Passport-Local-Mongoose and Cookie-Parser, this setup provides flexible, secure, and production-grade authentication flows.
🗺️ Geospatial Intelligence: I integrated the Google Maps API with geocoding to automatically plot properties on interactive maps. Each listing is tied to real-world coordinates, creating an immersive browsing experience that helps users visualize locations in context.
☁️ Cloud-Native Architecture: All images are uploaded via Multer and served through Cloudinary, which provides CDN-backed delivery, lazy-loading, caching, and automatic resizing. This ensures a visually rich platform that scales seamlessly without compromising performance.
🧩 Scalable MVC Design: I structured the codebase around a modular MVC architecture, keeping business logic, routing, and views cleanly separated. This approach improves maintainability, readability, and future scalability as new features are added.
🗂️ Robust Data Integrity: Using Joi schemas, I validate all incoming requests before they hit the database. This reduces runtime errors, enforces consistent formats, and ensures data reliability across authentication, listings, and reviews.
⚡ Performance & UX: Hosting the app on Render with MongoDB Atlas delivers fast response times and reliable uptime. Paired with responsive EJS templates and Bootstrap, the application adapts to any screen size, offering a smooth experience for desktop and mobile users alike.
📊 Real-World Security Practices: I enforced encrypted sessions, cookie-based state management, middleware-driven authorization, and CSRF protection. Flash messages provide instant feedback, making the app transparent and secure while enhancing usability.
🎨 User-Centered Design: I designed the interface with simplicity and clarity in mind — clean layouts, intuitive navigation, and helpful prompts ensure accessibility for all users, from tech-savvy hosts to casual travelers.
⭐ Community Features: I added reviews and ratings so users can share experiences and hosts can build trust. This transforms the platform into a more engaging and community-driven environment.
- Technologies: HTML, CSS, JavaScript, Bootstrap, EJS with EJS-Mate for layouts
- Responsive Design: Fully mobile-friendly layouts, optimized for multiple screen sizes
- User Interface: Clean navigation and intuitive forms for browsing, creating, and managing listings
- Maps Integration: Google Maps API with geocoding to plot property locations dynamically
- Technologies: Node.js, Express.js
- RESTful API: Organized routes for handling listings, reviews, authentication, and sessions
- Authentication: Multi-strategy Passport.js (Local + Google OAuth 2.0) with secure sessions
- Validation: Joi schemas to ensure all incoming data is clean and secure
- Database: MongoDB Atlas with Mongoose ODM
- Schema Design: Structured models for users, listings, and reviews
- Queries: Efficient querying and population for related data (e.g., listings with owners & reviews)
- Image Hosting: Cloudinary with Multer for uploads, ensuring reliable storage and optimized delivery
- Deployment: Application hosted on Render, database managed on MongoDB Atlas
- ⭐ User Reviews & Ratings: Integrated a review system where users can leave feedback and ratings, connected to listing models via
Mongoose
population. - 🔐 Secure Authentication & Sessions: Implemented multi-strategy
Passport.js
(Local & Google OAuth 2.0) with persistent sessions usingexpress-session
andconnect-mongo
. Password management handled withpassport-local-mongoose
. - 🗺️ Geolocation & Mapping: Integrated Google Maps API with geocoding for accurate property mapping and location-based features.
- 📊 Robust Validation: Enforced client- and server-side validation with
Joi
, preventing malformed or insecure data from entering the system. - 🎨 Dynamic Templating: Used
EJS
withejs-mate
layouts for modular, reusable, and scalable views. - 🍪 Cookie & Flash Messaging: Improved UX with
cookie-parser
andconnect-flash
to deliver secure cookies, notifications, and error/success messages. - 💾 File Uploads & Cloud Hosting: Managed file uploads with
multer
and@fluidjs/multer-cloudinary
, storing images inCloudinary
for optimized, CDN-backed delivery. - 🛡️ Security Enhancements: Used
dotenv
for environment management, encrypted sessions, cookie signing, and middleware-driven authorization. - 🏗️ MVC Architecture: Structured using a modular MVC pattern, ensuring maintainability, scalability, and clear separation of concerns.
- ⚡ Production-Ready Middleware: Integrated
method-override
for HTTP verbs support,axios
for server-side API requests, andbody-parser
for efficient request handling.
- Node.js – Backend runtime powering the server.
- Express.js – Fast, minimalist framework for building RESTful APIs and middleware-driven routes.
- MongoDB Atlas – Cloud-hosted NoSQL database for storing users, sessions, and listings.
- Mongoose – ODM used for schema definitions, model relationships, and database queries.
- Passport.js – Multi-strategy authentication (Local + Google OAuth 2.0).
- Passport-Local & Passport-Local-Mongoose – Simplifies username/password storage and session handling.
- Connect-Mongo – Stores session data securely inside MongoDB Atlas.
- Express-Session – Session middleware with encrypted, signed cookies.
- Cookie-Parser – Parses and secures cookies for authentication flows.
- Dotenv – Manages environment variables securely across dev/production.
- Joi – Robust schema validation to enforce request integrity and prevent malformed data.
- Multer – Middleware for handling file uploads.
- @fluidjs/multer-cloudinary – Direct integration between Multer and Cloudinary for scalable hosting.
- Cloudinary – CDN-backed image storage, optimization, and delivery.
- EJS – Server-side templating engine for dynamic content rendering.
- EJS-Mate – Layout & partial support for modular, DRY templating.
- Bootstrap – Responsive UI components (styling & layout).
- Method-Override – Enables PUT/DELETE support in forms for RESTful compliance.
- Connect-Flash – Flash messaging system for user feedback (success, error, info).
- Axios – For server-side API calls and integration with third-party services.
- Body-Parser – Parses incoming request bodies efficiently (integrated via Express 5).