A full-stack travel listing web application inspired by Airbnb, where users can explore destinations, create property listings, upload images, leave reviews, and manage their own listings securely.
Built using the MERN backend stack (Node.js, Express.js, MongoDB) with EJS templating and deployed-ready architecture.
- User Registration
- User Login & Logout
- Secure Password Hashing using Passport.js
- Session Authentication
- Persistent Login Sessions using MongoDB (
connect-mongo)
- Create new property listings
- Edit existing listings
- Delete listings
- Upload listing images using Cloudinary
- Responsive listing cards
- Individual listing details page
- Interactive Mapbox integration
- Automatic location geocoding
- Property location displayed on map
- Custom map markers with popup information
- Add reviews to listings
- Rating system
- Delete reviews
- Only logged-in users can review
- Review ownership authorization
- Only authenticated users can create listings
- Only listing owners can edit/delete listings
- Only review owners can delete reviews
- Success messages
- Error messages
- Validation feedback
- Cloudinary integration
- Multer middleware
- Image storage in cloud
- Bootstrap 5
- Mobile Friendly
- Clean Airbnb-inspired design
- HTML5
- CSS3
- Bootstrap 5
- EJS
- JavaScript
- Node.js
- Express.js
- MongoDB Atlas
- Mongoose
- Passport.js
- Passport Local Strategy
- Express Session
- Connect Mongo
- Cloudinary
- Mapbox
WanderLust/
│
├── controllers/
├── models/
├── routes/
├── middleware.js
├── utils/
├── public/
│ ├── css/
│ ├── js/
│ └── favicon.svg
│
├── views/
│ ├── layouts/
│ ├── includes/
│ ├── listings/
│ ├── users/
│ └── error.ejs
│
├── app.js
├── package.json
└── README.md
Clone the repository
git clone https://github.com/yourusername/wanderlust.gitGo into the project
cd wanderlustInstall dependencies
npm installCreate a .env file
ATLAS_URI=your_mongodb_connection_string
CLOUD_NAME=your_cloudinary_name
CLOUD_API_KEY=your_cloudinary_key
CLOUD_API_SECRET=your_cloudinary_secret
MAP_TOKEN=your_mapbox_token
SECRET=your_session_secretRun the application
npm startVisit
http://localhost:8080
| Variable | Description |
|---|---|
| ATLAS_URI | MongoDB Atlas Connection URL |
| CLOUD_NAME | Cloudinary Cloud Name |
| CLOUD_API_KEY | Cloudinary API Key |
| CLOUD_API_SECRET | Cloudinary Secret |
| MAP_TOKEN | Mapbox Access Token |
| SECRET | Session Secret |
Add screenshots here after deployment.
Example:
- Home Page
- Listing Details
- Login
- Register
- Add Listing
- Map View
- Search functionality
- Property categories
- Wishlist/Favorites
- Booking system
- Payment Gateway Integration
- User Profile
- Google OAuth
- Email Verification
- Admin Dashboard
- Notifications
This project helped me gain practical experience with:
- MVC Architecture
- RESTful Routing
- Authentication & Authorization
- Session Management
- Cloud Storage
- Geocoding APIs
- Middleware
- Error Handling
- CRUD Operations
- MongoDB Relationships
- Deployment Preparation
Contributions, issues, and feature requests are welcome.
Feel free to fork the project and submit a pull request.
This project is licensed under the MIT License.
Amit Chauhan
GitHub: https://github.com/amitx231
LinkedIn: https://www.linkedin.com/in/amitx231
⭐ If you like this project, don't forget to star the repository!