EventHive is a comprehensive full-stack web application designed to facilitate the discovery, organization, and management of events. It connects event organizers with attendees, providing a seamless experience for creating events, booking tickets, and managing attendance.
The application will serve three primary types of users:
- Attendees: Can browse, search, and book tickets for events.
- Organizers: Can create, update, and manage their events and view sales stats.
- Admins: Manage users, approve events (optional), and oversee platform activity.
The backend will be the core of the system, handling authentication, business logic for bookings, and data consistency, built with TypeScript and Express.
- Secure User & Organizer Sign-up/Login (JWT Auth).
- Profile Management.
- RBAC (Role-Based Access Control): Middleware to secure easy-to-miss endpoints.
- CRUD Operations: Create, Read, Update, Delete events.
- Ticket Management: specific types (VIP, General), quantity limits.
- Dashboard: View attendees list and revenue.
- Event Discovery: Search by category, date, or location.
- Booking Flow: Reserve tickets, handle concurrency (preventing overbooking).
- My Tickets: View booking history and QR code (simulated).
- Reviews: Attendees can rate events after they end.
- Backend: Node.js, Express, TypeScript (Strict typing for robustness).
- Database: MongoDB (Flexible schema for events).
- Frontend: React.
- Architecture: Layered Architecture (Controller-Service-Repository).
- Encapsulation:
BaseControllerclass handles common responses (success/error).- Services (e.g.,
EventService,BookingService) hide business logic from Controllers.
- Inheritance:
BaseUser->Organizer,Attendee,Admin. All share basic properties but have different implementations ofgetPermissions().BaseEvent->OnlineEvent(hasmeetingLink),VenueEvent(hasaddress,mapLocation). They implement abstract methods likegetDetails().
- Abstraction:
IPaymentGatewayinterface (e.g.,MockStripe,MockPayPal) to process payments without coupling to a specific provider.Ticketinterface defining common fields (price,label,type) with specific concrete classes.
- Factory Pattern: To create
Ticketobjects (VIP vs Regular) based on user selection. - Singleton Pattern: For the Database Connection instance.