Discover places worth staying.
StayScape is a full-stack travel and accommodation platform where users can discover beautiful stays, search and filter properties, save favorites, view detailed listings, write reviews, and create their own stays.
The project is built with Node.js, Express.js, MongoDB, EJS, and Cloudinary, with a strong focus on clean UI, authentication, image management, security, and practical full-stack functionality.
GitHub:
https://github.com/kunal-sonawane/StayScape
Live Demo:
Coming soon
- Browse available stays
- Beautiful responsive listing cards
- View detailed property information
- Explore different stay categories
- Location and country information
- Price per night
- Responsive design for desktop, tablet, and mobile
Search stays by:
- Title
- Location
- Country
Filter by:
- Category
- Minimum price
- Maximum price
Sort by:
- Price: Low to High
- Price: High to Low
Includes pagination for a better browsing experience.
Authenticated users can:
- Save favorite stays
- Remove saved stays
- View their saved properties
- Manage favorites from their account
StayScape includes:
- User registration
- Login
- Logout
- Session-based authentication
- Protected routes
- User-specific listings
- User-specific favorites
- Secure password handling
Authenticated users can create their own listings with:
- Property title
- Description
- Location
- Country
- Price
- Category
- Multiple property images
Listing owners can also manage their own listings.
StayScape uses Cloudinary for property image storage.
Features include:
- Multiple image uploads
- Cloud-based image storage
- Image optimization
- Image delivery through Cloudinary
- Image management when listings are updated or removed
Users can:
- Add reviews to listings
- View reviews
- Manage their own reviews
- Provide ratings for stays
StayScape includes location functionality using:
- Leaflet
- OpenStreetMap
- Location coordinates
- Interactive property locations
The application includes:
- Protected routes
- Authentication middleware
- CSRF protection
- Input sanitization
- Secure session handling
- Security headers
- Rate limiting
- Environment variables for secrets
- Centralized error handling
- Safe production error responses
- HTML5
- CSS3
- JavaScript
- EJS
- Node.js
- Express.js
- MongoDB
- Mongoose
- Cloudinary
- Leaflet
- OpenStreetMap
- Express sessions
- Password hashing
- CSRF protection
- Input sanitization
- Rate limiting
- Security headers
- Git
- GitHub
- VS Code
- npm
- Docker
- Render configuration
StayScape/
โ
โโโ app.js
โโโ package.json
โโโ package-lock.json
โโโ Dockerfile
โโโ Procfile
โโโ render.yaml
โโโ SECURITY.md
โโโ README.md
โ
โโโ models/
โ โโโ listing.js
โ โโโ user.js
โ โโโ review.js
โ
โโโ middleware/
โ โโโ ...
โ
โโโ utils/
โ โโโ ...
โ
โโโ views/
โ โโโ listings/
โ โโโ partials/
โ โโโ ...
โ
โโโ public/
โ โโโ css/
โ โโโ js/
โ โโโ images/
โ
โโโ tests/
โโโ docs/
โโโ init/
โ
โโโ Screenshots of project/
โโโโโโโโโโโโโโโโโโโโ
โ User โ
โโโโโโโโโโฌโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ StayScape UI โ
โ EJS + CSS + JS โ
โโโโโโโโโโฌโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ Express.js โ
โ Server โ
โโโโโโโโโโฌโโโโโโโโโโ
โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโ
โ โ โ
โผ โผ โผ
Authentication Listings Favorites
โ โ โ
โโโโโโโโโโโโโโโโโผโโโโโโโโโโโโโโโโโ
โ
โผ
โโโโโโโโโโโโโโโโโโโโ
โ MongoDB โ
โ + Mongoose โ
โโโโโโโโโโโโโโโโโโโโ
Property Images
โ
โผ
โโโโโโโโโโโโโโโ
โ Cloudinary โ
โโโโโโโโโโโโโโโ
The project screenshots are available in:
Screenshots of project/
The screenshots showcase:
- ๐ StayScape homepage
- ๐ก Explore stays
- ๐ Search and filtering
- ๐ Listing details
- โ Create a stay
- โ๏ธ Cloudinary image uploads
- โค๏ธ Favorites
- ๐ Login and registration
- ๐จโ๐ป Developer section
- ๐ฑ Responsive interface
Make sure you have installed:
- Node.js
- npm
- MongoDB / MongoDB Atlas
- Cloudinary account
git clone https://github.com/kunal-sonawane/StayScape.gitcd StayScapenpm installCreate a .env file in the project root.
Example:
MONGO_URL=your_mongodb_connection_string
PORT=8080
SESSION_SECRET=your_session_secret
CLOUDINARY_CLOUD_NAME=your_cloud_name
CLOUDINARY_API_KEY=your_api_key
CLOUDINARY_API_SECRET=your_api_secret
โ ๏ธ Never commit your.envfile or expose your MongoDB and Cloudinary credentials.
npm run seednpm startOpen:
http://localhost:8080
StayScape uses Cloudinary to store property images.
User selects images
โ
โผ
StayScape Server
โ
โผ
Cloudinary
โ
โผ
Image URL
โ
โผ
MongoDB
โ
โผ
StayScape Listing
This keeps image storage separate from the application server and provides reliable cloud-based image delivery.
Sensitive configuration is stored outside the source code.
The application uses environment variables for:
- MongoDB connection
- Session secret
- Cloudinary Cloud Name
- Cloudinary API Key
- Cloudinary API Secret
- Application configuration
The .env file is excluded from Git using .gitignore.
Automated tests are included in the project.
Run:
npm testStayScape includes deployment configuration for cloud hosting.
Deployment-related files include:
Dockerfile
Procfile
render.yaml
The application can be deployed to a Node.js-compatible hosting platform such as Render.
Building StayScape helped strengthen my practical understanding of:
- Node.js backend development
- Express.js
- MongoDB and Mongoose
- EJS templating
- Authentication and authorization
- Session management
- CRUD operations
- Cloudinary integration
- Image upload and management
- Search and filtering
- Pagination
- Favorites
- Reviews
- Maps and location functionality
- Security middleware
- Error handling
- Git and GitHub
- Deployment configuration
Potential future improvements include:
- ๐จ Booking and reservation system
- ๐ณ Payment integration
- ๐ง Email notifications
- ๐ Host analytics dashboard
- ๐ค Personalized stay recommendations
- ๐จโ๐ผ Admin dashboard
- ๐ Real-time notifications
- ๐ Advanced location-based discovery
Full Stack Developer
Building modern web applications with:
Node.js ยท Express.js ยท MongoDB ยท JavaScript ยท React.js
GitHub:
https://github.com/kunal-sonawane
LinkedIn:
https://linkedin.com/in/kunalsonawane
This project is created for learning, portfolio, and demonstration purposes.
Built with โค๏ธ by Kunal Sonawane