{"id":26035784,"url":"https://github.com/mjkj09/rentevent","last_synced_at":"2026-04-09T18:16:42.929Z","repository":{"id":280912837,"uuid":"943589173","full_name":"mjkj09/RentEvent","owner":"mjkj09","description":"RentEvent – A MERN-based platform for discovering and listing event venues.","archived":false,"fork":false,"pushed_at":"2025-03-06T00:39:24.000Z","size":0,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-06T01:30:56.774Z","etag":null,"topics":["expressjs","mern-stack","mongodb","nodejs","reactjs","responsive-design","venues","webapp"],"latest_commit_sha":null,"homepage":"","language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mjkj09.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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}},"created_at":"2025-03-06T00:31:25.000Z","updated_at":"2025-03-06T00:53:04.000Z","dependencies_parsed_at":"2025-03-06T01:31:00.780Z","dependency_job_id":"115441e1-9a2d-4afa-8f40-4714b7c8715e","html_url":"https://github.com/mjkj09/RentEvent","commit_stats":null,"previous_names":["mjkj09/rentevent"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjkj09%2FRentEvent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjkj09%2FRentEvent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjkj09%2FRentEvent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mjkj09%2FRentEvent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mjkj09","download_url":"https://codeload.github.com/mjkj09/RentEvent/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":242338993,"owners_count":20111502,"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","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":["expressjs","mern-stack","mongodb","nodejs","reactjs","responsive-design","venues","webapp"],"created_at":"2025-03-07T05:56:19.041Z","updated_at":"2026-04-09T18:16:42.874Z","avatar_url":"https://github.com/mjkj09.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"## 📋 Project Description\n\nRentEvent is a comprehensive web platform that connects venue owners with event organizers. The system provides an intuitive interface for browsing, booking, and managing event venues across various categories.\n\n### Key Features:\n- 🏢 **For Venue Owners**: Create and manage rental listings, handle customer inquiries\n- 🎉 **For Event Organizers**: Search venues, filter by category/location/price, save favourites\n- ❤️ **Favourites System**: Add venues to favourites for later\n- ⭐ **Review System**: Rate and review venues after events\n- 🔐 **Secure Authentication**: JWT with refresh tokens, role-based access control (owner/renter)\n- 📧 **Email Notifications**: Automated emails via SendInBlue (Brevo) for booking requests\n\n## 🏗️ System Architecture\n\n```\n                           ┌─────────────────┐\n                           │   Web Browser   │\n                           └────────┬────────┘\n                                    │\n                        ┌───────────▼───────────┐\n                        │  FRONTEND (React)     │\n                        │  - Port: 5173         │\n                        │  - Vite Dev Server    │\n                        │  - Material-UI        │\n                        └───────────┬───────────┘\n                                    │ HTTP/REST\n                        ┌───────────▼───────────┐\n                        │  BACKEND (Express)    │\n                        │  - Port: 5000         │\n                        │  - JWT Auth           │\n                        │  - RESTful API        │\n                        └─────┬─────────┬───────┘\n                              │         │\n                    ┌─────────▼───┐ ┌───▼──────────┐\n                    │   MongoDB   │ │  RabbitMQ    │\n                    │ Port: 27017 │ │ Port: 5672   │\n                    │             │ │ UI: 15672    │\n                    └─────────────┘ └──────────────┘\n                                            │\n                                    ┌───────▼────────┐\n                                    │ Email Service  │\n                                    │    (Brevo)     │\n                                    └────────────────┘\n```\n\n## 🛠️ Technologies Used\n\n### Frontend\n- **React 19.0.0** - Modern UI library for building user interfaces\n  - *Justification*: Latest version with improved performance, component-based architecture, excellent ecosystem\n- **Material-UI (MUI) 7.0.2** - React component library\n  - *Justification*: Consistent design system, built-in responsiveness, accessibility features\n- **React Router DOM 7.4.1** - Client-side routing\n  - *Justification*: Industry standard for React SPAs, supports nested routes and data loading\n- **Axios 1.9.0** - HTTP client\n  - *Justification*: Request/response interceptors for token handling, automatic JSON transformation\n- **Vite 6.2.0** - Build tool and dev server\n  - *Justification*: Lightning-fast HMR, optimized production builds, better DX than webpack\n- **Emotion** - CSS-in-JS styling (used by MUI)\n  - *Justification*: Dynamic styling, better performance than runtime CSS\n- **Zxcvbn 4.4.2** - Password strength estimator\n  - *Justification*: Provides realistic password strength feedback to users\n\n### Backend\n- **Node.js + Express 4.21.2** - Server framework\n  - *Justification*: JavaScript across the stack, mature ecosystem, excellent performance\n- **MongoDB + Mongoose 8.12.1** - NoSQL database and ODM\n  - *Justification*: Flexible schema for diverse venue types, excellent Node.js integration\n- **JWT (jsonwebtoken 9.0.2)** - Authentication\n  - *Justification*: Stateless authentication, supports refresh token pattern\n- **Bcrypt 6.0.0** - Password hashing\n  - *Justification*: Industry standard for password security, resistance to timing attacks\n- **Multer 2.0.1** - File upload handling\n  - *Justification*: Streamlined multipart/form-data handling, memory and disk storage options\n- **Joi 17.13.3** - Data validation\n  - *Justification*: Schema-based validation, clear error messages, extensive validation rules\n- **RabbitMQ (amqplib 0.10.8)** - Message queue\n  - *Justification*: Async processing for emails, improved system resilience\n- **SendInBlue SDK 8.5.0** - Email service\n  - *Justification*: Reliable email delivery, transactional email support, good free tier\n- **Swagger (swagger-jsdoc 6.2.8 + swagger-ui-express 5.0.1)** - API documentation\n  - *Justification*: Interactive API documentation, helps with frontend-backend coordination\n\n### DevOps \u0026 Development Tools\n- **Docker** - Containerization (Dockerfiles present)\n  - *Justification*: Consistent development environments, easy deployment\n- **Nodemon 3.1.9** - Development server\n  - *Justification*: Auto-restart on file changes, improves developer productivity\n- **ESLint 9.21.0** - Code linting\n  - *Justification*: Maintains code quality, catches potential bugs early\n- **CORS 2.8.5** - Cross-origin resource sharing\n  - *Justification*: Enables frontend-backend communication across different ports\n- **Cookie-parser 1.4.7** - Cookie handling\n  - *Justification*: Secure httpOnly cookie management for refresh tokens\n\n## 📦 System Requirements\n\n- Docker \u0026 Docker Compose (recommended)\n- OR manually install:\n  - Node.js \u003e= 18.0.0\n  - npm \u003e= 9.0.0\n  - MongoDB \u003e= 6.0\n  - RabbitMQ \u003e= 3.13.7\n\n## 🚀 Installation Instructions\n\n### 1. Clone Repository\n```bash\ngit clone https://github.com/mjkj09/RentEvent.git\ncd RentEvent\n```\n\n### 2. Environment Configuration\n\n#### Create root `.env` file (in project root directory)\n```env\n# Brevo (SendInBlue) Configuration\nBREVO_API_KEY=your_brevo_api_key_here\nBREVO_SENDER_EMAIL=noreply@yourdomain.com\n```\n\n#### Create server `.env` file (in `server/` directory)\n```env\n# Required Environment Variables\nJWT_SECRET=your_super_secret_jwt_key_here_min_32_characters\nJWT_REFRESH_SECRET=your_super_secret_refresh_key_here_min_32_characters\nNODE_ENV=development\n\n# Brevo (SendInBlue) - same as root .env\nBREVO_API_KEY=your_brevo_api_key_here\nBREVO_SENDER_EMAIL=noreply@yourdomain.com\n\n# Optional (defaults will be used if not specified)\nPORT=5000\nMONGODB_URI=mongodb://mongo:27017/rentevent\nRABBITMQ_URL=amqp://guest:guest@rabbitmq:5672\nCLIENT_URL=http://localhost:5173\n```\n\n### 3. Run with Docker Compose\n\n```bash\n# Build and start all services in detached mode\ndocker compose up --build -d\n\n# View logs\ndocker compose logs -f\n\n# Stop all services\ndocker compose down\n\n# Stop and remove all data (volumes)\ndocker compose down -v\n```\n\n### 4. Access the Application\n\nAfter running Docker Compose, the following services will be available:\n\n- **Frontend**: http://localhost:5173\n- **Backend API**: http://localhost:5000\n- **API Documentation (Swagger)**: http://localhost:5000/api/v1/docs/\n- **RabbitMQ Management UI**: http://localhost:15672\n    - Default credentials: `guest` / `guest`\n- **MongoDB**: mongodb://localhost:27017\n\n### 5. Alternative: Manual Setup (without Docker)\n\nIf you prefer to run services manually:\n\n#### Backend Setup\n```bash\ncd server\nnpm install\n\n# Make sure MongoDB and RabbitMQ are running locally\n# Start the backend\nnpm run dev\n```\n\n#### Frontend Setup\n```bash\ncd client\nnpm install\n\n# Start the frontend\nnpm run dev\n```\n\n## 🧪 Testing\n\n### Initial Setup\nThe application starts with an empty database. Users need to register new accounts to begin using the platform.\n\n### Registration Process\n1. Navigate to http://localhost:5173\n2. Click on \"Get Started\"\n3. Switch to \"Sign Up\" mode\n4. Create an account as either:\n    - **Event Organizer (Renter)**: Browse and book venues\n    - **Venue Owner**: List and manage venues (requires company setup)\n\n### API Testing\nUse the Swagger documentation at `http://localhost:5000/api/v1/docs/` to test API endpoints directly.\n\n## 📁 Project Structure\n```\nrentevent/\n├── .env                      # Root environment variables (Brevo config)\n├── docker-compose.yml        # Docker orchestration file\n├── README.md                 # This file\n│\n├── client/                   # React Frontend\n│   ├── public/              # Static assets\n│   ├── src/\n│   │   ├── api/             # API configuration and endpoints\n│   │   ├── components/      # Reusable React components\n│   │   ├── constants/       # Application constants\n│   │   ├── contexts/        # React Context providers\n│   │   ├── hooks/           # Custom React hooks\n│   │   ├── services/        # Business logic services\n│   │   ├── theme/           # Material-UI theme configuration\n│   │   ├── utils/           # Helper functions\n│   │   ├── views/           # Page components\n│   │   ├── App.jsx          # Main application component\n│   │   ├── index.css        # Global styles\n│   │   └── main.jsx         # Application entry point\n│   ├── Dockerfile           # Frontend container config\n│   ├── index.html           # HTML template\n│   └── package.json         # Frontend dependencies\n│\n└── server/                   # Node.js Backend\n    ├── config/              # Configuration files\n    ├── controllers/         # Request handlers\n    ├── docs/                # API documentation\n    ├── middleware/          # Express middleware\n    ├── models/              # Mongoose schemas\n    ├── public/              # Public assets\n    ├── repositories/        # Data access layer\n    ├── routes/              # API route definitions\n    ├── services/            # Business logic\n    │   ├── auth.service.js\n    │   ├── company.service.js\n    │   ├── email.service.js\n    │   ├── queue.service.js\n    │   ├── request.service.js\n    │   ├── review.service.js\n    │   ├── user.service.js\n    │   └── venue.service.js\n    ├── utils/               # Utility functions\n    │   ├── AppError.js      # Custom error class\n    ├── .env                 # Backend environment variables\n    ├── Dockerfile           # Backend container config\n    ├── index.js             # Server entry point\n    └── package.json         # Backend dependencies\n```\n\n## 🔒 Security Features\n\n- Password hashing with bcrypt (12 salt rounds)\n- JWT tokens with short expiration (15 minutes) + refresh tokens (30 days)\n- Input validation using Joi schemas\n- CSRF protection via httpOnly cookies\n- CORS configured for trusted origins only\n- File upload restrictions (type and size validation)\n- Request sanitization to prevent XSS attacks\n- Role-based access control (RBAC)\n- Secure password requirements enforced with zxcvbn\n\n## 📝 License\n\nThis project is licensed under the MIT License - see the LICENSE file for details.\n\n## 👥 Author\n\n- Mikołaj Munik - *CS Student at Cracow University of Technology* - [GitHub](https://github.com/mjkj09)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjkj09%2Frentevent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmjkj09%2Frentevent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmjkj09%2Frentevent/lists"}