A full-featured web application built with Node.js, Express, MongoDB, and EJS. This app allows users to register, log in, create listings, write reviews, and manage content securely with session-based authentication.
Inngo is a dynamic web platform inspired by popular vacation rental services. It enables users to browse, list, and review rental properties seamlessly. The platform focuses on delivering a secure and user-friendly experience for both travelers seeking unique accommodations and hosts wanting to showcase their listings. Features include user authentication, property management, reviews, and real-time feedback via flash messages, making Inngo a complete solution for short-term rental needs.
Check out the live version of the app here: Inngo Live Demo
- User Authentication with Passport.js (Local Strategy)
- CRUD operations for listings and reviews
- Flash messages for feedback (success/error)
- Data validation with Joi schemas
- EJS Templating with layouts using
ejs-mate - Smart error handling with a custom
ExpressErrorclass - Sessions stored in MongoDB via
connect-mongo - Security via session secrets and httpOnly cookies
- Node.js
- Express.js
- MongoDB + Mongoose
- EJS & ejs-mate
- Joi (for data validation)
- Passport.js
- dotenv
- connect-mongo
- method-override
- express-session
- connect-flash
git clone https://github.com/Mahesh20dev/Inngo.git cd Inngonpm installCreate a .env file in the root directory:
ATLAS_KEY=your_mongodb_atlas_url SECRET=your_secure_secret_key NODE_ENV=developmentnode app.jsOpen http://localhost:3000 in your browser.
AIRBNB/ ├── controllers/ # Controller files handling request/response logic ├── init/ # Initialization files (DB connection, configs, etc.) ├── models/ # Database models (e.g., Mongoose/Sequelize schemas) ├── node_modules/ # Installed dependencies (ignored in Git & Docker) ├── public/ # Static files (CSS, JS, images, etc.) ├── routes/ # Application routes/endpoints ├── utils/ # Utility/helper functions ├── views/ # Templates or frontend view files │ ├── .dockerignore # Files/folders ignored by Docker ├── .env # Environment variables ├── .gitignore # Files/folders ignored by Git ├── app.js # Main application entry point ├── cloudConfig.js # Cloud-related configurations ├── docker-compose.yaml # Docker Compose setup ├── Dockerfile # Docker image build instructions ├── middleware.js # Custom middleware functions ├── package.json # Project metadata & dependencies ├── package-lock.json # Dependency lock file ├── README.md # Project documentation └── schema.js # Schema definitions (DB or validation)To deploy on Render, Heroku, or similar platforms:
-
Replace hardcoded port with:
const port = process.env.PORT || 3000; app.listen(port, () => { console.log(`Server running on port ${port}`); });
-
Set environment variables (
ATLAS_KEY,SECRET) in the hosting dashboard.
node app.js # Start the server- If MongoDB Atlas URL or secret is invalid, app won't connect.
- Flash messages rely on sessions; ensure
express-sessionis correctly configured.
You can run Inngo directly via Docker without installing Node.js manually.
# Pull specific version docker pull maheshyc/inngo:1.0ATLAS_KEY=your_mongodb_atlas_url SECRET=your_secure_secret_key NODE_ENV=productiondocker run -p 3000:3000 --env-file .env maheshyc/inngo:1.0Now open 👉 http://localhost:3000