0 online
Project Overview
WanderLust is a full-stack web application inspired by Airbnb that allows users to discover, list, and review travel accommodations worldwide. The platform features user authentication, property listings, reviews, and interactive maps.
Technical Stack
Backend
Node.js, Express.js
Frontend
EJS, Bootstrap, JavaScript
Database
MongoDB with Mongoose ODM
Authentication
Passport.js
Cloud Services
Cloudinary, Mapbox
Deployment
Vercel
Key Features
1. User Authentication & Authorization
module.exports.signup = async (req, res, next) => {
try {
let { username, email, password } = req.body;
const newUser = new User({ email, username });
const registeredUser = await User.register(newUser, password);
req.login(registeredUser, (err) => {
if(err) {
return next(err);
}
req.flash("success", "Welcome to Wanderlust");
return res.redirect("/listings");
});
} catch(e) {
req.flash("error", e.message);
return res.redirect("/signup");
}
}
- Implemented secure user authentication using Passport.js
- Password reset functionality with email notifications
- Session management with MongoDB store
2. Property Listings Management
module.exports.createListing = async (req, res, next) => {
try {
let response = await geocodingClient
.forwardGeocode({
query: req.body.listing.location,
limit: 1,
})
.send();
let url = req.file.path;
let filename = req.file.filename;
const newListing = new Listing(req.body.listing);
newListing.owner = req.user._id;
newListing.image = { url, filename };
newListing.geometry = response.body.features[0].geometry;
let savedListing = await newListing.save();
req.flash("success", "New listing Created!");
return res.redirect("/listings");
} catch (err) {
next(err);
}
};
3. Review System
const reviewSchema = new Schema({
comment: String,
rating: {
type: Number,
min: 1,
max: 5,
},
createdAt: {
type: Date,
default: Date.now(),
},
author: {
type: Schema.Types.ObjectId,
ref: "User",
},
});
Technical Challenges & Solutions
1. Secure File Upload
Challenge:
Implementing secure and efficient image upload functionality.
Solution:
- Implemented Cloudinary integration for secure image hosting
- Added file validation and size restrictions
- Created optimized image transformations
2. Location Services
Challenge:
Implementing accurate and interactive location features.
Solution:
- Integrated Mapbox geocoding for accurate locations
- Implemented reverse geocoding for validation
- Created interactive map interfaces
Key Learnings
Authentication Best Practices
- Secure authentication flows
- Password reset functionality
- Session management
Cloud Service Integration
- Multiple third-party APIs
- Environment variables
- Asynchronous operations
Database Design
- MongoDB schema design
- Collection relationships
- Efficient querying
Impact & Results
- Successfully deployed a full-stack application
- Implemented complex features like maps and image upload
- Created a scalable and maintainable codebase
- Developed a responsive and user-friendly interface
Future Improvements
- Real-time messaging between users
- Payment gateway integration
- Advanced search filters
- Booking management system
- User verification system