Event Easy is a comprehensive, full-stack event management platform built with modern web technologies. It provides a seamless experience for event discovery, organization, and management with a focus on user experience, security, and scalability.
- Runtime: Node.js with Express.js
- Database: MongoDB with Mongoose ODM
- Authentication: JWT with bcrypt password hashing
- File Storage: Cloudinary for media management
- Email Service: Nodemailer with SMTP
- Validation: Express-validator for request validation
- Security: CORS, cookie-parser, helmet (recommended)
- Framework: React 19 with Vite
- Styling: Tailwind CSS with custom design system
- State Management: Context API with custom hooks
- Routing: React Router DOM
- HTTP Client: Axios with interceptors
- Animations: Framer Motion
- Icons: Lucide React & React Icons
- Date Handling: date-fns
event-easy/
βββ backend/
β βββ src/
β β βββ config/ # Configuration files
β β β βββ database.js # MongoDB connection
β β β βββ cloudinary.js # Cloud storage config
β β β βββ email.js # Email service config
β β βββ controllers/ # Route controllers
β β βββ middleware/ # Custom middleware
β β β βββ auth.js # Authentication middleware
β β β βββ validation.js # Request validation
β β β βββ upload.js # File upload handling
β β βββ models/ # Database models
β β β βββ User.js # User model with methods
β β β βββ Event.js # Event model with geospatial
β β β βββ Review.js # Review model
β β β βββ Report.js # Report model
β β βββ routes/ # API routes
β β βββ services/ # Business logic services
β β β βββ AuthService.js # Authentication service
β β βββ utils/ # Utility functions
β βββ package.json
β βββ .env.example
βββ frontend/
β βββ src/
β β βββ components/ # Reusable components
β β β βββ common/ # Common UI components
β β β βββ forms/ # Form components
β β β βββ layout/ # Layout components
β β βββ pages/ # Page components
β β βββ hooks/ # Custom React hooks
β β β βββ useAuth.js # Authentication hook
β β β βββ useEvents.js # Events management hook
β β βββ services/ # API services
β β β βββ api.js # Centralized API client
β β βββ utils/ # Utility functions
β β β βββ constants.js # Application constants
β β β βββ helpers.js # Helper functions
β β βββ context/ # React context providers
β β βββ assets/ # Static assets
β βββ package.json
β βββ vite.config.js
βββ README.md
- User Management: Registration, authentication, email verification
- Event Management: Create, read, update, delete events with media support
- Location Services: Geospatial event discovery and mapping
- Review System: Rate and review events with moderation
- Reporting System: Report inappropriate content with admin workflow
- Admin Dashboard: Comprehensive admin panel with analytics
- Responsive Design: Mobile-first approach with Tailwind CSS
- Real-time Updates: Live event status and notification system
- File Upload: Secure image and video upload with validation
- Search & Filter: Advanced event discovery with multiple filters
- Security: JWT authentication, input validation, XSS protection
- Performance: Optimized queries, lazy loading, caching strategies
- Node.js (v18 or higher)
- MongoDB (local or cloud instance)
- Cloudinary account for media storage
- Email service credentials (Gmail/SMTP)
-
Clone and navigate to backend
cd backend npm install -
Environment Configuration
cp .env.example .env
Configure the following variables:
# Database MONGO_URI=mongodb://localhost:27017/event-easy # JWT JWT_SECRET=your-super-secret-jwt-key JWT_EXPIRES_IN=7d SALT_ROUNDS=12 # Cloudinary CLOUDINARY_CLOUD_NAME=your-cloud-name CLOUDINARY_API_KEY=your-api-key CLOUDINARY_API_SECRET=your-api-secret # Email Service SENDER_EMAIL=your-email@gmail.com SENDER_PASS=your-app-password # Server PORT=5000 NODE_ENV=development FRONTEND_URL=http://localhost:5173
-
Start the server
npm run dev
-
Navigate to frontend and install dependencies
cd frontend npm install -
Environment Configuration
# Create .env file echo "VITE_API_URL=http://localhost:5000" > .env
-
Start the development server
npm run dev
- ES6+ Features: Use modern JavaScript features
- Async/Await: Prefer async/await over promises
- Error Handling: Comprehensive error handling with try-catch
- Documentation: JSDoc comments for all functions and classes
- Naming Conventions: camelCase for variables, PascalCase for components
- Service Layer: Business logic separated from controllers
- Middleware: Reusable middleware for common operations
- Validation: Input validation using express-validator
- Error Handling: Centralized error handling middleware
- Security: Input sanitization and rate limiting
- Component Structure: Functional components with hooks
- State Management: Context API with custom hooks
- API Integration: Centralized API service with interceptors
- Error Boundaries: React error boundaries for error handling
- Performance: React.memo, useMemo, useCallback for optimization
{
name: String,
email: String (unique),
password: String (hashed),
role: ['attendee', 'organizer', 'admin'],
isVerified: Boolean,
profilePicture: { public_id, url },
preferences: { categories, notifications },
timestamps: true
}{
eventName: String,
time: Date,
category: String (enum),
description: String,
location: { type: 'Point', coordinates: [lng, lat] },
organizer: ObjectId (ref: User),
attendees: [ObjectId] (ref: User),
status: ['pending', 'approved', 'rejected'],
imageUrl: { public_id, url },
videoUrl: { public_id, url },
capacity: Number,
price: { amount, currency },
timestamps: true
}- Authentication: JWT tokens with secure HTTP-only cookies
- Password Security: bcrypt hashing with configurable salt rounds
- Input Validation: Server-side validation for all inputs
- File Upload Security: File type and size validation
- CORS Configuration: Restricted cross-origin requests
- Rate Limiting: API rate limiting to prevent abuse
- XSS Protection: Input sanitization and output encoding
- Environment Setup: Configure production environment variables
- Database: Set up MongoDB Atlas or production database
- File Storage: Configure Cloudinary for production
- Server: Deploy to Heroku, DigitalOcean, or AWS
- Build:
npm run build - Static Hosting: Deploy to Vercel, Netlify, or AWS S3
- Environment: Configure production API endpoints
- Unit Tests: Jest for service and utility functions
- Integration Tests: Supertest for API endpoint testing
- Database Tests: MongoDB Memory Server for isolated testing
- Component Tests: React Testing Library
- Hook Tests: Custom hook testing utilities
- E2E Tests: Cypress for end-to-end testing
- Database Indexing: Proper indexing for query optimization
- Caching: Redis for session and data caching
- Compression: Gzip compression for responses
- Connection Pooling: MongoDB connection pooling
- Code Splitting: Dynamic imports for route-based splitting
- Image Optimization: Lazy loading and responsive images
- Bundle Analysis: Webpack bundle analyzer for optimization
- Caching: Service worker for offline functionality
- Fork the repository
- Create feature branch:
git checkout -b feature/amazing-feature - Commit changes:
git commit -m 'Add amazing feature' - Push to branch:
git push origin feature/amazing-feature - Open Pull Request
- Follow the established code style and patterns
- Write comprehensive tests for new features
- Update documentation for API changes
- Ensure all tests pass before submitting PR
POST /Event-Easy/users/register # User registration
POST /Event-Easy/users/login # User login
POST /Event-Easy/users/logout # User logout
POST /Event-Easy/users/verify-otp # Email verification
GET /Event-Easy/users/is-auth # Check authentication
GET /Event-Easy/Event/events # Get all events
POST /Event-Easy/Event/createEvents # Create new event
GET /Event-Easy/Event/events/:id # Get event by ID
PUT /Event-Easy/Event/events/:id # Update event
DELETE /Event-Easy/Event/events/:id # Delete event
POST /Event-Easy/Event/events/:id/attend # Attend event
- MongoDB Connection: Ensure MongoDB is running and connection string is correct
- Cloudinary Upload: Verify API credentials and network connectivity
- Email Service: Check SMTP credentials and app password setup
- CORS Errors: Ensure frontend URL is whitelisted in backend CORS config
Enable debug logging by setting NODE_ENV=development and checking console outputs.
This project is licensed under the MIT License - see the LICENSE file for details.
- Backend Development: Node.js, Express.js, MongoDB
- Frontend Development: React, Tailwind CSS, Framer Motion
- DevOps: Deployment, CI/CD, Monitoring
- Design: UI/UX, Responsive Design, Accessibility
- MongoDB: For the robust database solution
- Cloudinary: For reliable media storage and optimization
- Tailwind CSS: For the utility-first CSS framework
- React Community: For the excellent ecosystem and tools
Event Easy - Transforming event management in Ethiopia with modern web technologies.
For support or questions, please open an issue or contact the development team.