A full-stack Airbnb-inspired web application where users can explore, create, and review travel listings with secure authentication, cloud image uploads, and interactive maps.
π Live Demo: https://wanderlust-1-qo2x.onrender.com/listings
Wanderlust is a production-ready travel listing platform built using the MVC architecture.
It allows users to discover destinations, share listings, and interact through reviews β all within a secure and responsive system.
Beyond standard CRUD operations, the application integrates:
- Authentication & authorization
- Cloud-based media handling
- Location-based services
- Advanced UI features like search and category filtering
- Create, edit, and delete listings
- View all listings with clean UI
- Detailed listing page with:
- Image
- Description
- Price
- Location with map
- Search listings by keywords
- Filter listings based on categories
- Enhances user experience and discoverability
- Secure user authentication using Passport.js
- Signup, Login, Logout
- Signout (Account Deletion) (Custom Feature)
- Permanently deletes user from database
Access Control:
- Only listing owners can edit/delete listings
- Only review authors can delete reviews
- Cloudinary integration for image storage
- Multer for handling file uploads
- Image preview during edit
- Add reviews with ratings and comments
- Linked to both users and listings
- Cascade deletion when a listing is removed
- MapTiler integration
- Convert location β coordinates
- Display interactive map on listing page
- Responsive design using Bootstrap
- Improved layout and visual hierarchy
- Flash messages for user feedback
- Clean navigation and user flow
- Joi validation for listings and reviews
- Prevents invalid submissions
- Session-based authentication
- Designed using MVC architecture for scalability and maintainability
- Implements secure authentication & role-based authorization
- Integrates third-party services (Cloudinary, MapTiler)
- Includes custom features beyond tutorial scope (search, filters, account deletion)
- Built with focus on real-world usability and clean UI/UX
| Layer | Technology |
|---|---|
| Backend | Node.js, Express.js |
| Database | MongoDB, Mongoose |
| Frontend | EJS, Bootstrap 5 |
| Auth | Passport.js |
| File Upload | Multer, Cloudinary |
| Validation | Joi |
| Maps | MapTiler |
| Resource | Action | Access |
|---|---|---|
| Listings | View | Public |
| Listings | Create | Logged-in Users |
| Listings | Edit/Delete | Owner Only |
| Reviews | Create | Logged-in Users |
| Reviews | Delete | Author Only |
- Hosting: Render
- Database: MongoDB Atlas
- Image Storage: Cloudinary
π https://wanderlust-1-qo2x.onrender.com/listings
| Index Page | Show Page |
|---|---|
![]() |
![]() |
| Review Page | Map on Show Page |
|---|---|
![]() |
![]() |
| Create Listing Page | Edit Page |
|---|---|
![]() |
![]() |
| Signup Page | Login Page |
|---|---|
![]() |
![]() |
| Delete Account Page | Confirm Delete Page |
|---|---|
![]() |
![]() |
git clone https://github.com/techxkirti/Wanderlust.git
cd Wanderlustnpm installCreate a .env file in the root directory:
CLOUD_NAME=your_cloudinary_name
CLOUD_API_KEY=your_api_key
CLOUD_API_SECRET=your_api_secret
MAPTILER_API_KEY=your_maptile_api_key
SESSION_SECRET=your_secretMake sure MongoDB is running:
mongodb://127.0.0.1:27017/wanderlustnode init/index.jsnode app.jsπ Access the App
Open your browser and visit:
http://localhost:8080/listings









