A production-ready, full-stack property rental platform that enables users to discover premium accommodations, manage listings, and share authentic reviews. Built with modern web development practices and scalable architecture.
- Secure Session Management: Passport.js with local strategy
- Role-Based Access Control: Ownership-based authorization system
- Password Hashing: Bcrypt implementation via Passport-Local-Mongoose
- Environment Variables: Sensitive data protection
- CSRF Protection: Built-in Express security middleware
- CRUD Operations: Create, Read, Update, Delete listings
- Multi-Image Upload: Cloudinary integration with drag-and-drop support
- Rich Listing Details: Location, pricing, amenities, and descriptions
- Responsive Gallery: Optimized image display across devices
- 5-Star Rating System: Intuitive rating interface
- User Reviews: Authenticated users can leave detailed feedback
- Review Moderation: Author-only deletion capabilities
- Average Rating Calculation: Automatic aggregation and display
- Responsive Design: Mobile-first Bootstrap 5 implementation
- Real-Time Feedback: Flash messages for user actions
- Server-Side Rendering: EJS templates with partials
- Form Validation: Client and server-side validation
- Loading States: Optimistic UI patterns
- Runtime: Node.js v18+
- Framework: Express.js 4.x
- Database: MongoDB with Mongoose ODM
- Authentication: Passport.js + Passport-Local-Mongoose
- File Upload: Multer + Cloudinary SDK
- Templating: EJS (Embedded JavaScript)
- Styling: Bootstrap 5 + Custom CSS
- Icons: Font Awesome
- JavaScript: Vanilla ES6+ with modular patterns
- Environment Management: dotenv
- Validation: Express-Validator
- Session Management: Express-Session
- File Processing: Multer
- HTTP Methods: Method-Override
- Notifications: Connect-Flash
ElysiumStay/ ├── app.js # Application entry point ├── package.json # Dependencies and scripts ├── .env.example # Environment variables template ├── .gitignore # Git ignore rules │ ├── config/ # Configuration files │ ├── database.js # MongoDB connection setup │ ├── cloudinary.js # Cloudinary configuration │ └── passport.js # Passport authentication setup │ ├── controllers/ # Business logic controllers │ ├── listingController.js │ ├── reviewController.js │ └── userController.js │ ├── models/ # Mongoose schemas and models │ ├── User.js # User schema with authentication │ ├── Listing.js # Property listing schema │ └── Review.js # Review and rating schema │ ├── routes/ # Express route definitions │ ├── listingRoutes.js │ ├── reviewRoutes.js │ └── userRoutes.js │ ├── middleware/ # Custom middleware functions │ ├── auth.js # Authentication middleware │ ├── validate.js # Validation middleware │ └── errorHandler.js # Error handling middleware │ ├── views/ # EJS templates │ ├── layouts/ # Layout components │ ├── partials/ # Reusable components │ ├── listings/ # Listing-related views │ ├── reviews/ # Review-related views │ └── users/ # User-related views │ ├── public/ # Static assets │ ├── css/ # Stylesheets │ ├── js/ # Client-side JavaScript │ ├── images/ # Static images │ └── uploads/ # Temporary upload directory │ ├── utils/ # Utility functions │ ├── catchAsync.js # Async error handler │ ├── ExpressError.js # Custom error class │ └── helpers.js # Helper functions │ └── tests/ # Test suites ├── unit/ # Unit tests └── integration/ # Integration tests
- Node.js 18+ & npm 8+
- MongoDB 6+ (Local or Atlas)
- Cloudinary Account
- Git
- Clone the repository
git clone https://github.com/Jay-dodke/ElysiumStay.git
cd ElysiumStay
🚀 Development Scripts
# Start development server with hot reload
npm run dev
# Run production server
npm start
# Run tests
npm test
# Lint code
npm run lint
# Format code
npm run format
# Seed database with sample data
npm run db:seed
🔒 Security Practices
Password hashing using Passport Local Mongoose
Protected routes using middleware
Sensitive data secured via environment variables
Server-side validation for user input
📌 Current Status
🚧 Actively under development
Planned improvements:
Search & filter listings
Map-based location browsing
Pagination & performance optimizations
Deployment to cloud platform
👨💻 Author
Jay Dodke
Full-Stack Developer (MERN)
📍 India
This project reflects my hands-on experience with building real-world web applications and continuously improving code quality, security, and scalability.
📄 License
This project is for learning and demonstration purposes.