A modern adventure activity booking platform built with Node.js and MongoDB
WildSpire is a full-stack web application designed for discovering and booking adventure activities. Users can explore thrilling locations, leave reviews, and manage their bookings seamlessly. Whether you're into hiking, kayaking, or rock climbing, WildSpire helps you plan your next adventure effortlessly.
β
User Authentication - Secure login/signup with Passport.js
β
Activity Management - Create, edit, and delete adventure activities
β
Image Handling - Upload multiple images with Cloudinary integration
β
Location Services - Interactive maps powered by Mapbox
β
Review System - User ratings and feedback for activities
β
Responsive UI - Mobile-first design with Bootstrap 5
β
Enhanced Security - Input validation, XSS protection, rate limiting
β
Data Persistence - MongoDB with Mongoose ODM
π View Live Demo - Try it now!
Email: demo@wildspire.com
Password: Demo@123
Note: This is a demo account for testing purposes. All data may be reset periodically.
- Backend: Node.js, Express.js
- Database: MongoDB, Mongoose
- Frontend: EJS, Bootstrap 5
- APIs: Mapbox, Cloudinary
- Authentication: Passport.js
- Security: Helmet, Express-Rate-Limit, MongoDB-Sanitize
Ensure you have the following installed before running the project:
- Node.js (>= 14.x)
- MongoDB (>= 4.x)
- Cloudinary Account (for image uploads)
- Mapbox Account (for interactive maps)
# Clone the repository
git clone https://github.com/kasimlohar/wildspire.git
cd wildspire
# Install dependencies
npm install
# Start the development server
npm run dev- Copy
.env.exampleto.env:
cp .env.example .env- Fill in your credentials:
NODE_ENV=development
PORT=8080
MONGO_URI=your_mongodb_uri
CLOUD_NAME=your_cloudinary_name
CLOUD_API_KEY=your_cloudinary_key
CLOUD_API_SECRET=your_cloudinary_secret
MAP_TOKEN=your_mapbox_token
SESSION_SECRET=your_session_secretwildspire/
βββ controllers/ # Route handlers
βββ middleware/ # Custom middleware
βββ models/ # Database schemas
βββ public/ # Static assets
β βββ css/
β βββ js/
β βββ images/
βββ routes/ # Route definitions
βββ utils/ # Helper functions
βββ views/ # EJS templates
β
CSRF Protection - Secure user interactions
β
XSS Prevention - Protects against cross-site scripting attacks
β
Rate Limiting - Prevents excessive API requests
β
Input Validation - Ensures data integrity
β
Secure Sessions - Protects user data
β
Image Upload Validation - Filters unsafe file types
- User can register new account
- User can login/logout
- User can create activity with images
- User can edit own activities
- User can delete own activities
- User can add reviews
- User can edit own reviews
- User can delete own reviews
- User can book activities
- Search functionality works
- Filter by difficulty works
- Sort by price works
- Maps display correctly
- Image upload works
- Responsive on mobile
- Toast notifications appear
- Form validation works
npm testRun the demo verification script to test all functionality:
# Test all demo features
node test-demo.js
# Initialize database with demo data
npm run init-db# Install artillery globally
npm install -g artillery
# Run load test
artillery quick --count 10 --num 50 https://your-app.vercel.com/activities- β Chrome 90+
- β Firefox 88+
- β Safari 14+
- β Edge 90+
β οΈ Internet Explorer - Not supported
- Image lazy loading - Images load as user scrolls
- Database indexing - Text search and query optimization
- Lean queries - MongoDB
.lean()for faster JSON conversion - CDN delivery - Bootstrap, icons, and libraries from CDN
- Gzip compression - Automatic compression in production
- CSS/JS minification - Minified assets for production builds
- Rate limiting may trigger during development due to hot reload (this is expected)
- Demo bookings are instant confirmations (no payment processing)
- Email notifications for bookings and reviews
- Payment integration (Stripe/Razorpay)
- Admin dashboard for managing all activities
- Activity favoriting/wishlist
- Social media sharing integration
- Multi-language support (i18n)
- Mobile app (React Native)
- Advanced search with filters (date range, price range)
- Activity recommendations based on user preferences
- Real-time availability calendar
WildSpire is ready for deployment on:
- Render
- Vercel
- Mongo Atlas
- AWS
Contributions are welcome! Please follow these steps:
- Fork the repository
- Create feature branch
git checkout -b feature/AmazingFeature
- Commit your changes
git commit -m 'Add some AmazingFeature' - Push to the branch
git push origin feature/AmazingFeature
- Open a Pull Request
- Use ES6+ features (arrow functions, async/await, destructuring)
- Follow ESLint configuration included in project
- Write meaningful commit messages using conventional commits
- Add comments for complex logic
- Update documentation for new features
- Test your changes before submitting PR
# Fork and clone the repo
git clone https://github.com/kasimlohar/wildspire.git
cd wildspire
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
# Edit .env with your credentials
# Initialize database with demo data
npm run init-db
# Start development server
npm run devIf you find any bugs, please open an issue with:
- Bug description
- Steps to reproduce
- Expected vs actual behavior
For issues, questions, or suggestions:
- Email: kasimlohar@example.com
- GitHub Issues: Create Issue
- LinkedIn: Kasim Lohar
- Github: kasimlohar
This project is licensed under the MIT License - see the LICENSE file for details.
- β Commercial use
- β Modification
- β Distribution
- β Private use
β οΈ Liability and warranty limitations apply
Special thanks to:
- Mapbox - Beautiful mapping services and geocoding
- Cloudinary - Reliable image hosting and transformation
- Bootstrap - Responsive UI components
- MongoDB - Flexible NoSQL database
- Express.js - Fast, minimalist web framework
- Passport.js - Authentication middleware
- EJS - Embedded JavaScript templating
- Unsplash Photographers - Amazing activity images
- MDN Web Docs - JavaScript and Web API references
- Stack Overflow - Community support
- Express.js Documentation - Framework guide
Made with β€οΈ by Kasim Lohar
β Star this repo if you found it helpful!
π Share with others who might benefit from this project
Happy adventuring! ποΈπ



