WanderHub is a full-stack web application inspired by Airbnb. It allows users to explore, create, and manage property listings for travel stays. With features like image uploads, geolocation, reviews, and secure authentication, the platform offers a complete experience for both hosts and travelers.
- 🔐 User Authentication – Secure signup, login, and logout using Passport.js
- 🏡 CRUD Operations – Create, read, update, and delete listings and reviews
- 📷 Image Uploads – Upload listing images using Cloudinary
- 🗺️ Geolocation – Location features integrated with Mapbox
- 📱 Responsive Design – Built with Bootstrap 5 for mobile-first experience
- ✅ Validation – Joi used for validating user inputs and data
⚠️ Error Handling – Custom error handling with helpful feedback- 💬 Flash Messages – Real-time alerts using connect-flash
- Templating: EJS
- CSS Framework: Bootstrap 5
- Custom CSS: Additional styling for unique UI
- Runtime: Node.js
- Framework: Express.js
- Database: MongoDB with Mongoose
- Authentication: Passport.js with passport-local-mongoose
- File Uploads: Multer and Cloudinary
- Maps: Mapbox SDK
wanderlust/
├── Model/ # Mongoose schemas
│ ├── listings.js
│ ├── reviews.js
│ └── users.js
├── Routes/ # Express route handlers
│ ├── listings.js
│ ├── listing.js
│ ├── reviews.js
│ └── user.js
├── controllers/ # Route logic
│ ├── listings.js
│ ├── reviews.js
│ └── users.js
├── views/ # EJS templates
│ ├── layouts/
│ ├── listings/
│ ├── user/
│ ├── includes/
│ └── Error.ejs
├── public/ # Static files
│ ├── css/
│ └── js/
├── utils/ # Utility functions
│ ├── wrapAsync.js
│ └── ExpressError.js
├── init/ # Sample data
│ ├── data.js
│ └── index.js
├── app.js # Main app entry point
├── schema.js # Joi validation schemas
├── cloudConfig.js # Cloudinary configuration
└── package.json # Project metadata
| Method | Endpoint | Description |
|---|---|---|
| GET | /listings |
View all listings |
| POST | /listings |
Create a new listing |
| GET | /listing/:id |
View a single listing |
| PUT | /listing/:id |
Update a listing |
| DELETE | /listing/:id |
Delete a listing |
| Method | Endpoint | Description |
|---|---|---|
| POST | /listing/:id/reviews |
Add a review |
| DELETE | /listing/:id/reviews/:reviewId |
Delete a review |
| Method | Endpoint | Description |
|---|---|---|
| GET | /signup |
Render signup page |
| POST | /signup |
Register a new user |
| GET | /login |
Render login page |
| POST | /login |
Login existing user |
| GET | /logout |
Logout current user |
app.js– Main app file, sets up middleware, routes, and error handlerscloudConfig.js– Cloudinary image upload configschema.js– Joi schemas for validating datamiddleware.js– Custom middleware functions
Shivani Pandey Made with ❤️ for travelers and hosts.
This project is licensed under the ISC License.
- Flash messages give users instant feedback
- Designed to be scalable and easy to maintain
width="1897" height="860" alt="Image" src="https://github.com/user-attachments/assets/948beb9a-220e-4fb7-9064-81f7a10af0d5" />