{"id":28435051,"url":"https://github.com/pankajnarwade28/wonderlust","last_synced_at":"2026-05-06T06:32:52.816Z","repository":{"id":288752086,"uuid":"969083950","full_name":"PankajNarwade28/Wonderlust","owner":"PankajNarwade28","description":"This is full stack hotel booking website developed using Express with database MongoDB ,Bootstrap and used various functionalities to make it completely working and responsive.","archived":false,"fork":false,"pushed_at":"2025-05-24T10:54:08.000Z","size":298,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-24T14:54:19.069Z","etag":null,"topics":["bootstrap","ejs-template-engine","express-middleware","express-session","mongoatlas","mongodb-database","mongoose","mvc-architecture","passport-local-mongoose","responsive-website"],"latest_commit_sha":null,"homepage":"https://wonderlust-88hd.onrender.com/listings/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/PankajNarwade28.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-04-19T10:51:57.000Z","updated_at":"2025-08-21T10:51:36.000Z","dependencies_parsed_at":"2025-04-19T16:22:10.178Z","dependency_job_id":"c3cfeca7-6573-49a2-888c-5d98078606b7","html_url":"https://github.com/PankajNarwade28/Wonderlust","commit_stats":null,"previous_names":["pankajnarwade28/wonderlust"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/PankajNarwade28/Wonderlust","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PankajNarwade28%2FWonderlust","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PankajNarwade28%2FWonderlust/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PankajNarwade28%2FWonderlust/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PankajNarwade28%2FWonderlust/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/PankajNarwade28","download_url":"https://codeload.github.com/PankajNarwade28/Wonderlust/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/PankajNarwade28%2FWonderlust/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279000755,"owners_count":26082921,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-09T02:00:07.460Z","response_time":59,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","ejs-template-engine","express-middleware","express-session","mongoatlas","mongodb-database","mongoose","mvc-architecture","passport-local-mongoose","responsive-website"],"created_at":"2025-06-05T20:06:13.514Z","updated_at":"2025-10-09T04:04:44.077Z","avatar_url":"https://github.com/PankajNarwade28.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Wonderlust - Listings Application\r\n\r\nA full-featured Express.js web application for listing travel experiences, complete with user authentication, session management, file uploads via Cloudinary, and robust data validation.\r\n\r\nHosted Example: [https://wonderlust-88hd.onrender.com/listings](https://wonderlust-88hd.onrender.com/listings)\r\n\r\n## Table of Contents\r\n\r\n* [Features](#features)\r\n* [Tech Stack](#tech-stack)\r\n* [Installation](#installation)\r\n* [Environment Variables](#environment-variables)\r\n* [Running Locally](#running-locally)\r\n* [Deployment](#deployment)\r\n* [Project Structure](#project-structure)\r\n* [Author](#author)\r\n* [License](#license)\r\n\r\n## Features\r\n\r\n* **User Authentication \u0026 Authorization** using Passport.js (local strategy) and role checks\r\n* **Session Management** with `express-session` \u0026 `connect-mongo` for persistent sessions\r\n* **Flash Messages** via `connect-flash` for success/error notifications\r\n* **File Uploads** to Cloudinary using `multer` and `multer-storage-cloudinary`\r\n* **Data Validation** on routes with Joi schemas\r\n* **Method Override** to support PUT \u0026 DELETE from HTML forms\r\n* **Templating** with EJS and layout inheritance via EJS-Mate\r\n* **Security**: cookie parsing, environment variable management with dotenv\r\n\r\n## Architecture\r\n\r\nThis application follows the **Model-View-Controller (MVC)** pattern:\r\n\r\n* **Models** (`/models`): Define your data schemas and interact with MongoDB using Mongoose (e.g., `Listing`, `User`).\r\n* **Views** (`/views`): EJS templates that render the user interface, with layout inheritance provided by EJS-Mate.\r\n* **Controllers** (`/routes` and `middleware`): Business logic for handling requests, validation via Joi, and authorization checks. Routes delegate to specific handler functions that act as controllers.\r\n\r\n## Tech Stack\r\n\r\n* **Runtime**: Node.js, Express.js\r\n* **Database**: MongoDB (via Mongoose)\r\n* **Templating**: EJS, EJS-Mate\r\n* **Authentication**: Passport.js, Passport-Local, Passport-Local-Mongoose\r\n* **Sessions**: express-session, connect-mongo\r\n* **File Storage**: Cloudinary SDK, multer, multer-storage-cloudinary\r\n* **Validation**: Joi\r\n* **Utilities**: method-override, cookie-parser, dotenv, connect-flash\r\n\r\n## Installation\r\n\r\n1. Clone the repository:\r\n\r\n   ```bash\r\n   git clone https://github.com/PankajNarwade28/wonderlust-listings.git\r\n   cd wonderlust-listings\r\n   ```\r\n2. Install dependencies:\r\n\r\n   ```bash\r\n   npm install\r\n   ```\r\n\r\n## Environment Variables\r\n\r\nCreate a `.env` file in the root directory and add the following values:\r\n\r\n```ini\r\nPORT=3000\r\nDB_URL=\u003cyourAtlasUrl\u003e\r\nSECRET=\u003cyourSessionSecret\u003e\r\nCLOUDINARY_CLOUD_NAME=\u003cyourCloudName\u003e\r\nCLOUDINARY_KEY=\u003cyourApiKey\u003e\r\nCLOUDINARY_SECRET=\u003cyourApiSecret\u003e\r\n```\r\n\r\n## Running Locally\r\n\r\n```bash\r\n# Start in development mode with automatic reloads:\r\nnpm run dev\r\n\r\n# Or start normally:\r\nnpm start\r\n```\r\n\r\nVisit `http://localhost:3000` and navigate to **/listings** to view the app.\r\n\r\n## Deployment\r\n\r\nThis app can be deployed on platforms like Render, Heroku, or similar.\r\n\r\n1. Push your code to GitHub.\r\n2. Create a new Web Service on Render or Heroku.\r\n3. Connect your GitHub repository.\r\n4. Set your Environment Variables in the platform dashboard (same as above).\r\n5. Deploy and visit your live site! Sample live demo:\r\n\r\n   [https://wonderlust-88hd.onrender.com/listings](https://wonderlust-88hd.onrender.com/listings)\r\n\r\n## Project Structure\r\n\r\n```\r\n├── classroom/        # Classroom related resources\r\n├── controllers/      # Controller logic for routes\r\n├── Images/           # Image assets for the app\r\n├── init/             # Initialization scripts or seed data\r\n├── models/           # Mongoose schemas (Listing, User)\r\n├── node_modules/     # Installed dependencies\r\n├── public/           # Static assets (CSS, JS, images)\r\n├── routes/           # Express route modules\r\n├── uploads/          # File upload storage (local before Cloudinary)\r\n├── util/             # Utility functions and helpers\r\n├── views/            # EJS templates and layouts\r\n├── .env              # Environment variables (not in repo)\r\n├── .gitignore        # Files and folders to ignore in Git\r\n├── app.js            # Express app setup \u0026 config\r\n├── CloudConfig.js    # Cloudinary configuration\r\n├── middleware.js     # Custom middleware definitions\r\n├── package.json      # Dependencies \u0026 scripts\r\n├── package-lock.json # Lockfile for exact dependencies\r\n├── README.md         # This documentation\r\n└── schema.js         # Database schema definitions (if separate)\r\n```\r\n\r\n## Author\r\n\r\nDeveloped by *Pankaj  Narwade*.\r\n\r\n## License\r\n\r\nThis project is licensed under the MIT License. See the [LICENSE](LICENSE) file for details.\r\n\r\n## Monitoring \u0026 Disclaimer\r\n\r\nAll operations—including creating, editing, or deleting listings—are actively monitored and logged by the site administrator. By using this application, you consent to this monitoring and agree that your actions may be reviewed at any time. Unauthorized, malicious, or non-compliant activities may result in suspension or termination of your account, removal of content, or legal action at the administrator’s discretion.\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpankajnarwade28%2Fwonderlust","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpankajnarwade28%2Fwonderlust","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpankajnarwade28%2Fwonderlust/lists"}