Skip to content

Latest commit

Β 

History

293 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Hat-Ya-Seedy-El-Computer

Project Banner

A comprehensive event management platform for the German University in Cairo (GUC)

React Node.js MongoDB Express Tailwind CSS

Features β€’ Installation β€’ Usage β€’ API Documentation β€’ Contributing


Table of Contents


About the Project

Hat-Ya-Seedy-El-Computer is a full-stack event management platform designed specifically for the German University in Cairo (GUC). The system provides a centralized solution for managing various campus activities including workshops, conferences, trips, bazaars, gym sessions, court reservations, and vendor management.

Why This Project?

Educational institutions often struggle with fragmented event management systems. This platform solves that problem by providing:

  • Unified Platform: Single system for all event types
  • Role-Based Access: 7 different user roles with specific permissions
  • Payment Integration: Stripe payments and internal wallet system
  • Automated Workflows: Email notifications, QR codes, automatic refunds
  • Comprehensive Reporting: Analytics and export capabilities for administrators

Built With

This project leverages modern web technologies to deliver a fast, scalable, and maintainable application:

Frontend:

Backend:

Additional Services:


Features

Event Management

  • βœ… Multiple Event Types: Workshops, Trips, Bazaars, Conferences, Booths, Gym Sessions
  • βœ… Advanced Filtering: Search by name, location, type, date, and professor
  • βœ… Smart Sorting: Sort events by date, popularity, or availability
  • βœ… Event Archiving: Automatic archiving of past events
  • βœ… Role-Based Restrictions: Limit events to specific user groups
  • βœ… QR Code Generation: For external visitors and event check-ins
  • βœ… Favorites System: Users can bookmark events

Workshop Workflow

  • βœ… Professor Submission: Faculty can submit workshop proposals
  • βœ… Review System: Events Office approval/rejection workflow
  • βœ… Status Tracking: pending, accepted, rejected, needs_edits
  • βœ… Edit Requests: Office can request modifications
  • βœ… Participant Management: View registered users and capacity

Payment System

  • βœ… Stripe Integration: Secure credit/debit card payments
  • βœ… Digital Wallet: Internal wallet for payments and refunds
  • βœ… Automatic Refunds: Money returned to wallet on cancellation
  • βœ… Email Receipts: Automatic payment confirmation emails
  • βœ… Transaction History: Complete payment audit trail

Vendor Management

  • βœ… Vendor Registration: Complete onboarding with document upload
  • βœ… Tax Card Verification: Upload tax cards and company logos
  • βœ… ID Management: Upload IDs for booth attendees
  • βœ… Participation Requests: Apply for bazaars and booths
  • βœ… Fee Management: Pay participation fees online
  • βœ… Loyalty Program: Apply to GUC loyalty program with custom discounts
  • βœ… Booth Polling: Voting system for booth selection

Gym & Court Reservations

  • βœ… Gym Session Management: Create, edit, and cancel sessions
  • βœ… Court Reservations: Basketball, Tennis, Football courts
  • βœ… Real-time Availability: See available time slots
  • βœ… Auto-cancellation: Unconfirmed reservations auto-cancel
  • βœ… Email Notifications: Alerts for changes and cancellations

Ratings & Reviews

  • βœ… Event Ratings: 5-star rating system
  • βœ… Comments: Users can leave detailed feedback
  • βœ… Moderation: Admins can remove inappropriate comments
  • βœ… Attendance Verification: Only attendees can rate/comment

Notifications & Communication

  • βœ… In-app Notifications: Real-time system notifications
  • βœ… Email Verification: Account activation emails
  • βœ… Payment Receipts: Automatic receipt generation
  • βœ… Workshop Updates: Acceptance/rejection notifications
  • βœ… Attendance Certificates: Email certificates after events
  • βœ… Cancellation Alerts: Notify users of cancelled events

Reporting & Analytics

  • βœ… Attendance Reports: Filter by event name, type, and date
  • βœ… Sales Reports: Revenue tracking with filtering and sorting
  • βœ… Export Functionality: Download registrations as XLSX
  • βœ… User Analytics: Track participation and engagement
  • βœ… Revenue Insights: Analyze income by event type

Administration

  • βœ… User Management: Block/unblock users
  • βœ… Content Moderation: Remove inappropriate comments
  • βœ… Workshop Review Dashboard: Centralized approval interface
  • βœ… Vendor Requests: Approve/reject vendor applications
  • βœ… System-wide Settings: Configure platform parameters

Technologies Used

Frontend Stack

Technology Version Purpose
React 19.1.1 UI component library
Vite 7.1.7 Build tool and dev server
Tailwind CSS 3.4.3 Utility-first styling
React Router DOM 7.9.4 Client-side routing
Axios 1.12.2 HTTP requests
Framer Motion 12.23.24 Animations
Lucide React 0.545.0 Icon library
React Hot Toast 2.6.0 Toast notifications
Sonner 2.0.7 Advanced notifications
DayJS 1.11.19 Date manipulation
QRCode 1.5.4 QR code generation
XLSX 0.18.5 Excel export

Backend Stack

Technology Version Purpose
Node.js ES Modules JavaScript runtime
Express 5.1.0 Web framework
MongoDB Atlas NoSQL database
Mongoose 8.18.2 MongoDB ODM
JWT 9.0.2 Authentication
Bcrypt 6.0.0 Password hashing
Stripe 19.3.0 Payment processing
Nodemailer 7.0.6 Email service
Resend 6.4.2 Email API
Multer 2.0.2 File uploads
Node-cron 4.2.1 Task scheduling
Joi 18.0.1 Validation
QRCode 1.5.4 QR generation
XLSX 0.18.5 Excel export
Canvas 3.2.0 Image manipulation
CORS 2.8.5 Cross-origin requests

System Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Client Layer                          β”‚
β”‚   (React SPA - Role-based routing and state management)     β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚ HTTPS/REST API
                      β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Application Layer                          β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   Express    β”‚ β”‚ Middleware   β”‚ β”‚  Authentication     β”‚ β”‚
β”‚  β”‚   Router     β”‚ β”‚  - Auth      β”‚ β”‚  - JWT Tokens       β”‚ β”‚
β”‚  β”‚              β”‚ β”‚  - Upload    β”‚ β”‚  - Role Validation  β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Business Logic Layer                       β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚              Controllers (12 modules)                 β”‚   β”‚
β”‚  β”‚  β€’ Events  β€’ Users  β€’ Vendors  β€’ Payments            β”‚   β”‚
β”‚  β”‚  β€’ Registrations  β€’ Notifications  β€’ Analytics       β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                      β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    Data Layer                                β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”‚
β”‚  β”‚         MongoDB Atlas (22 Collections)               β”‚   β”‚
β”‚  β”‚  Users β€’ Events β€’ Workshops β€’ Trips β€’ Bazaars        β”‚   β”‚
β”‚  β”‚  Registrations β€’ Payments β€’ Wallets β€’ Notifications  β”‚   β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
        β”‚                    β”‚                    β”‚
β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”
β”‚    Stripe    β”‚    β”‚  Nodemailer  β”‚    β”‚   File       β”‚
β”‚   Payment    β”‚    β”‚    Email     β”‚    β”‚  Storage     β”‚
β”‚   Gateway    β”‚    β”‚   Service    β”‚    β”‚  (Uploads)   β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Getting Started

Prerequisites

Before you begin, ensure you have the following installed:

  • Node.js (v18.0.0 or higher)
    node --version
  • npm (v9.0.0 or higher) or yarn
    npm --version
  • MongoDB Atlas Account (or local MongoDB instance)
  • Stripe Account (for payment processing)
  • Gmail Account (for email notifications)

Installation

Follow these steps to set up the project locally:

1. Clone the Repository

git clone https://github.com/Advanced-Computer-Lab-2025/Hat-Ya-Seedy-El-Computer.git
cd Hat-Ya-Seedy-El-Computer

2. Install Backend Dependencies

cd backend
npm install

3. Install Frontend Dependencies

cd ../frontend
npm install

Environment Variables

Backend Configuration

Create a .env file in the backend directory:

cd backend
touch .env

Add the following environment variables:

# Server Configuration
PORT=5001
NODE_ENV=development

# Database Configuration
MONGODB_URI=your_mongodb_connection_string

# JWT Configuration
JWT_SECRET=your_super_secret_jwt_key_min_32_characters
JWT_EXPIRE=7d

# Stripe Configuration
STRIPE_SECRET_KEY=your_stripe_secret_key
STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key

# Email Configuration (Gmail)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your_email@gmail.com
EMAIL_PASSWORD=your_app_specific_password
ADMIN_EMAIL=admin@guc.edu.eg

# Frontend URL
FRONTEND_URL=http://localhost:5173

# File Upload
MAX_FILE_SIZE=5242880
UPLOAD_PATH=./uploads

Frontend Configuration

Create a .env file in the frontend directory:

cd ../frontend
touch .env

Add the following:

VITE_API_URL=http://localhost:5001/api
VITE_STRIPE_PUBLISHABLE_KEY=your_stripe_publishable_key

Running the Application

Development Mode

Open two terminal windows:

Terminal 1 - Backend:

cd backend
npm run dev

Server will start on http://localhost:5001

Terminal 2 - Frontend:

cd frontend
npm run dev

Application will open on http://localhost:5173

Production Mode

Build Frontend:

cd frontend
npm run build

Start Backend:

cd backend
npm start

User Roles

The system supports 7 distinct user roles, each with specific permissions:

1. Student

Access Level: Basic User

Capabilities:

  • Browse and filter all events
  • Register for workshops, trips, and conferences
  • Reserve courts (basketball, tennis, football)
  • Make payments via Stripe or wallet
  • Rate and comment on attended events
  • Manage favorites list
  • View wallet balance and transaction history
  • Receive email notifications and certificates

2. Staff

Access Level: Basic User+

Capabilities:

  • All student capabilities
  • Additional permissions for staff-only events
  • Priority registration for certain events

3. Teaching Assistant (TA)

Access Level: Academic User

Capabilities:

  • All student capabilities
  • Participate in academic events
  • Provide feedback on workshops
  • Access to TA-specific resources

4. Professor

Access Level: Content Creator

Capabilities:

  • All TA capabilities
  • Submit workshop proposals
  • Track workshop approval status
  • View workshop participants and remaining spots
  • Receive notifications on workshop acceptance/rejection
  • Edit submitted workshops based on feedback

5. Events Office

Access Level: Event Manager

Capabilities:

  • All event browsing capabilities
  • Review and approve/reject workshop proposals
  • Create and manage all event types
  • Archive past events
  • Generate QR codes for external visitors
  • Create polls for vendor booth selection
  • Manage gym sessions (create, edit, cancel)
  • Generate attendance and sales reports
  • Export registration data to Excel
  • Restrict events to specific user groups

6. Admin

Access Level: System Administrator

Capabilities:

  • All Events Office capabilities
  • User management (block/unblock users)
  • Content moderation (delete comments)
  • View system-wide analytics
  • Access to all reports and data
  • System configuration

7. Vendor

Access Level: External Partner

Capabilities:

  • Apply for bazaar participation
  • Request booth reservations
  • Upload required documents (tax card, IDs, logo)
  • Pay participation fees
  • Apply for GUC loyalty program
  • Manage booth details and promotions
  • Cancel participation requests

API Documentation

Base URL

http://localhost:5001/api

Authentication

Most endpoints require JWT authentication. Include the token in the Authorization header:

Authorization: Bearer <your_jwt_token>

Main Endpoints

Authentication

Method Endpoint Description Auth Required
POST /users/register Register new user No
POST /users/login User login No
GET /users/verify-email/:token Verify email No
POST /users/forgot-password Request password reset No

Events

Method Endpoint Description Auth Required
GET /events Get all events Yes
GET /events/:id Get event by ID Yes
POST /events Create event Yes (Events Office)
PUT /events/:id Update event Yes (Events Office)
DELETE /events/:id Delete event Yes (Events Office)
GET /events/filter Filter events Yes

Workshops

Method Endpoint Description Auth Required
POST /events/workshop Submit workshop Yes (Professor)
PUT /events/workshop/:id/status Update status Yes (Events Office)
GET /events/workshops/pending Get pending workshops Yes (Events Office)

Registrations

Method Endpoint Description Auth Required
POST /registrations Register for event Yes
GET /registrations/user/:userId Get user registrations Yes
DELETE /registrations/:id Cancel registration Yes

Payments

Method Endpoint Description Auth Required
POST /payments/create-intent Create payment intent Yes
POST /payments/confirm Confirm payment Yes
GET /wallet/balance Get wallet balance Yes

Vendors

Method Endpoint Description Auth Required
POST /vendors/apply Apply as vendor Yes
PUT /vendors/:id Update vendor info Yes
POST /vendors/booth-request Request booth Yes (Vendor)

Courts

Method Endpoint Description Auth Required
GET /courts/available Get available slots Yes
POST /courts/reserve Reserve court Yes
DELETE /courts/:id Cancel reservation Yes

Gym Sessions

Method Endpoint Description Auth Required
GET /gymsessions Get all sessions Yes
POST /gymsessions Create session Yes (Events Office)
PUT /gymsessions/:id Update session Yes (Events Office)
DELETE /gymsessions/:id Cancel session Yes (Events Office)

For complete API documentation with request/response examples, see API_DOCS.md (to be created).


Project Structure

Hat-Ya-Seedy-El-Computer/
β”‚
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ config/
β”‚   β”‚   β”‚   └── db.js                    # MongoDB connection
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ controllers/
β”‚   β”‚   β”‚   β”œβ”€β”€ eventController.js       # Event CRUD operations
β”‚   β”‚   β”‚   β”œβ”€β”€ userController.js        # User management
β”‚   β”‚   β”‚   β”œβ”€β”€ vendorController.js      # Vendor operations
β”‚   β”‚   β”‚   β”œβ”€β”€ paymentController.js     # Payment processing
β”‚   β”‚   β”‚   β”œβ”€β”€ registrationController.js # Event registrations
β”‚   β”‚   β”‚   β”œβ”€β”€ notificationController.js # Notifications
β”‚   β”‚   β”‚   β”œβ”€β”€ gymSessionController.js  # Gym management
β”‚   β”‚   β”‚   β”œβ”€β”€ courtReservationController.js # Court bookings
β”‚   β”‚   β”‚   β”œβ”€β”€ pollController.js        # Vendor polls
β”‚   β”‚   β”‚   β”œβ”€β”€ walletController.js      # Wallet operations
β”‚   β”‚   β”‚   └── analyticsController.js   # Reports & analytics
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ models/                      # 22 Mongoose schemas
β”‚   β”‚   β”‚   β”œβ”€β”€ User.js                  # User model
β”‚   β”‚   β”‚   β”œβ”€β”€ Event.js                 # Base event model
β”‚   β”‚   β”‚   β”œβ”€β”€ Workshop.js              # Workshop model
β”‚   β”‚   β”‚   β”œβ”€β”€ Conference.js            # Conference model
β”‚   β”‚   β”‚   β”œβ”€β”€ Trip.js                  # Trip model
β”‚   β”‚   β”‚   β”œβ”€β”€ Bazaar.js                # Bazaar model
β”‚   β”‚   β”‚   β”œβ”€β”€ Booth.js                 # Booth model
β”‚   β”‚   β”‚   β”œβ”€β”€ GymSession.js            # Gym session model
β”‚   β”‚   β”‚   β”œβ”€β”€ CourtReservation.js      # Court reservation model
β”‚   β”‚   β”‚   β”œβ”€β”€ Registration.js          # Event registration model
β”‚   β”‚   β”‚   β”œβ”€β”€ Payment.js               # Payment model
β”‚   β”‚   β”‚   β”œβ”€β”€ Wallet.js                # Wallet model
β”‚   β”‚   β”‚   β”œβ”€β”€ Transaction.js           # Transaction model
β”‚   β”‚   β”‚   β”œβ”€β”€ Vendor.js                # Vendor model
β”‚   β”‚   β”‚   β”œβ”€β”€ VendorRequest.js         # Vendor application model
β”‚   β”‚   β”‚   β”œβ”€β”€ Notification.js          # Notification model
β”‚   β”‚   β”‚   β”œβ”€β”€ Comment.js               # Comment model
β”‚   β”‚   β”‚   β”œβ”€β”€ Rating.js                # Rating model
β”‚   β”‚   β”‚   β”œβ”€β”€ Poll.js                  # Poll model
β”‚   β”‚   β”‚   β”œβ”€β”€ LoyaltyApplication.js    # Loyalty program application
β”‚   β”‚   β”‚   └── LoyaltyPartner.js        # Loyalty partner model
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ routes/                      # API route definitions
β”‚   β”‚   β”‚   β”œβ”€β”€ userRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ eventRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ vendorRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ paymentRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ registrationRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ notificationRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ gymSessionRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ courtRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ pollRoutes.js
β”‚   β”‚   β”‚   β”œβ”€β”€ walletRoutes.js
β”‚   β”‚   β”‚   └── analyticsRoutes.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ middlewares/
β”‚   β”‚   β”‚   β”œβ”€β”€ authMiddleware.js        # JWT authentication
β”‚   β”‚   β”‚   └── uploadMiddleware.js      # File upload handling
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ validation/
β”‚   β”‚   β”‚   β”œβ”€β”€ signupValidationSchema.js
β”‚   β”‚   β”‚   β”œβ”€β”€ adminCreationSchema.js
β”‚   β”‚   β”‚   β”œβ”€β”€ facultyApprovalSchema.js
β”‚   β”‚   β”‚   └── vendorValidation.js
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ utils/
β”‚   β”‚   β”‚   β”œβ”€β”€ sendEmail.js             # Email utility
β”‚   β”‚   β”‚   β”œβ”€β”€ stripe.js                # Stripe configuration
β”‚   β”‚   β”‚   └── scheduler.js             # Cron jobs
β”‚   β”‚   β”‚
β”‚   β”‚   └── server.js                    # Application entry point
β”‚   β”‚
β”‚   β”œβ”€β”€ uploads/                         # Uploaded files storage
β”‚   β”œβ”€β”€ .env                             # Environment variables (DO NOT COMMIT)
β”‚   β”œβ”€β”€ .env.example                     # Environment template
β”‚   β”œβ”€β”€ package.json                     # Backend dependencies
β”‚   └── .gitignore
β”‚
β”œβ”€β”€ frontend/
β”‚   β”œβ”€β”€ public/                          # Static assets
β”‚   β”‚
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ features/                    # Feature-based modules
β”‚   β”‚   β”‚   β”œβ”€β”€ admin/                   # Admin components
β”‚   β”‚   β”‚   β”œβ”€β”€ auth/                    # Authentication
β”‚   β”‚   β”‚   β”œβ”€β”€ student/                 # Student features
β”‚   β”‚   β”‚   β”œβ”€β”€ professor/               # Professor features
β”‚   β”‚   β”‚   β”œβ”€β”€ staffTA/                 # Staff/TA features
β”‚   β”‚   β”‚   β”œβ”€β”€ vendor/                  # Vendor features
β”‚   β”‚   β”‚   β”œβ”€β”€ eventOffice/             # Events Office features
β”‚   β”‚   β”‚   β”œβ”€β”€ gym/                     # Gym management
β”‚   β”‚   β”‚   └── polls/                   # Polling system
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ api/                         # API service layer
β”‚   β”‚   β”‚   β”œβ”€β”€ axiosInstance.js         # Axios configuration
β”‚   β”‚   β”‚   β”œβ”€β”€ eventApi.js              # Event API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ userApi.js               # User API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ vendorApi.js             # Vendor API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ registrationApi.js       # Registration API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ gymApi.js                # Gym API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ adminApi.js              # Admin API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ notificationApi.js       # Notification API calls
β”‚   β”‚   β”‚   β”œβ”€β”€ pollApi.js               # Poll API calls
β”‚   β”‚   β”‚   └── courtsApi.js             # Court API calls
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ routes/                      # Route configurations
β”‚   β”‚   β”‚   β”œβ”€β”€ AppRoutes.jsx            # Main router
β”‚   β”‚   β”‚   β”œβ”€β”€ AdminRoutes.jsx          # Admin routes
β”‚   β”‚   β”‚   β”œβ”€β”€ StudentRoutes.jsx        # Student routes
β”‚   β”‚   β”‚   β”œβ”€β”€ ProfessorRoutes.jsx      # Professor routes
β”‚   β”‚   β”‚   β”œβ”€β”€ StaffTARoutes.jsx        # Staff/TA routes
β”‚   β”‚   β”‚   β”œβ”€β”€ VendorRoutes.jsx         # Vendor routes
β”‚   β”‚   β”‚   β”œβ”€β”€ eventsOfficeRoutes.jsx   # Events Office routes
β”‚   β”‚   β”‚   └── gymRoutes.jsx            # Gym routes
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ context/                     # React Context API
β”‚   β”‚   β”‚   β”œβ”€β”€ AuthContext.jsx          # Authentication context
β”‚   β”‚   β”‚   └── NotificationContext.jsx  # Notification context
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ components/                  # Shared components
β”‚   β”‚   β”‚   β”œβ”€β”€ common/                  # Reusable UI components
β”‚   β”‚   β”‚   β”œβ”€β”€ layout/                  # Layout components
β”‚   β”‚   β”‚   └── forms/                   # Form components
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ hooks/                       # Custom React hooks
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ utils/                       # Utility functions
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ assets/                      # Images, fonts, etc.
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ App.jsx                      # Root component
β”‚   β”‚   β”œβ”€β”€ main.jsx                     # Application entry
β”‚   β”‚   └── index.css                    # Global styles
β”‚   β”‚
β”‚   β”œβ”€β”€ dist/                            # Build output
β”‚   β”œβ”€β”€ index.html                       # HTML template
β”‚   β”œβ”€β”€ vite.config.js                   # Vite configuration
β”‚   β”œβ”€β”€ tailwind.config.js               # Tailwind CSS config
β”‚   β”œβ”€β”€ postcss.config.js                # PostCSS config
β”‚   β”œβ”€β”€ eslint.config.js                 # ESLint configuration
β”‚   β”œβ”€β”€ package.json                     # Frontend dependencies
β”‚   └── .env                             # Frontend env vars (DO NOT COMMIT)
β”‚
β”œβ”€β”€ .git/                                # Git repository
β”œβ”€β”€ .gitignore                           # Git ignore rules
β”œβ”€β”€ README.md                            # This file
└── LICENSE                              # License file

Database Schema

Core Collections

Users Collection

{
  _id: ObjectId,
  name: String,
  email: String (unique),
  password: String (hashed),
  role: Enum ['student', 'staff', 'ta', 'professor', 'eventsOffice', 'admin', 'vendor'],
  isVerified: Boolean,
  isBlocked: Boolean,
  createdAt: Date,
  updatedAt: Date
}

Events Collection

{
  _id: ObjectId,
  type: Enum ['workshop', 'trip', 'bazaar', 'conference', 'booth'],
  title: String,
  description: String,
  location: String,
  startDate: Date,
  endDate: Date,
  capacity: Number,
  remainingSpots: Number,
  price: Number,
  restrictions: [String], // User roles
  status: Enum ['active', 'archived', 'cancelled'],
  organizerId: ObjectId (ref: User),
  createdAt: Date,
  updatedAt: Date
}

Registrations Collection

{
  _id: ObjectId,
  eventId: ObjectId (ref: Event),
  userId: ObjectId (ref: User),
  paymentStatus: Enum ['pending', 'paid', 'refunded'],
  paymentMethod: Enum ['stripe', 'wallet'],
  attendanceStatus: Enum ['registered', 'attended', 'absent'],
  registrationDate: Date
}

Payments Collection

{
  _id: ObjectId,
  userId: ObjectId (ref: User),
  amount: Number,
  type: Enum ['event_registration', 'vendor_fee', 'court_reservation'],
  status: Enum ['pending', 'completed', 'failed', 'refunded'],
  stripePaymentId: String,
  createdAt: Date
}

Wallets Collection

{
  _id: ObjectId,
  userId: ObjectId (ref: User),
  balance: Number,
  transactions: [{
    amount: Number,
    type: Enum ['credit', 'debit'],
    description: String,
    date: Date
  }]
}

For complete schema documentation, see DATABASE.md (to be created).


Screenshots

Landing Page

Landing Page

Event Browsing

Events Page

Workshop Submission

Workshop Form

Payment Flow

Payment

Admin Dashboard

Admin Dashboard

Vendor Portal

Vendor


Roadmap

Phase 1 - Core Features βœ… (Completed)

  • User authentication and authorization
  • Event management (CRUD operations)
  • Workshop submission and approval workflow
  • Payment integration (Stripe + Wallet)
  • Email notification system
  • Court reservation system
  • Vendor management
  • Reporting and analytics

Phase 2 - Enhanced Features 🚧 (In Progress)

  • Mobile app (React Native)
  • Push notifications
  • Advanced analytics dashboard
  • Calendar integration (Google Calendar, iCal)
  • Social media sharing
  • Multi-language support (Arabic/English)

Phase 3 - Advanced Features πŸ“‹ (Planned)

  • AI-powered event recommendations
  • Chatbot for event inquiries
  • Video streaming for online workshops
  • Blockchain-based attendance verification
  • Integration with university systems (SIS)
  • Mobile payment options (e-wallets)

Phase 4 - Optimization 🎯 (Future)

  • Performance optimization
  • CDN integration for static assets
  • Advanced caching strategies
  • Load testing and scaling
  • Microservices architecture migration

Contributing

We welcome contributions from the community! Here's how you can help:

How to Contribute

  1. Fork the Repository

    git clone https://github.com/Advanced-Computer-Lab-2025/Hat-Ya-Seedy-El-Computer.git
    cd Hat-Ya-Seedy-El-Computer
  2. Create a Feature Branch

    git checkout -b feature/amazing-feature
  3. Make Your Changes

    • Write clean, maintainable code
    • Follow the existing code style
    • Add comments where necessary
    • Update documentation if needed
  4. Commit Your Changes

    git add .
    git commit -m "Add: amazing new feature"

    Commit Message Guidelines:

    • Add: for new features
    • Fix: for bug fixes
    • Update: for updates to existing features
    • Refactor: for code refactoring
    • Docs: for documentation changes
  5. Push to Your Fork

    git push origin feature/amazing-feature
  6. Open a Pull Request

    • Go to the original repository
    • Click "New Pull Request"
    • Provide a clear description of your changes
    • Reference any related issues

Code Style Guidelines

JavaScript/React

  • Use ES6+ features
  • Use functional components with hooks
  • Follow Airbnb JavaScript Style Guide
  • Use meaningful variable and function names
  • Keep functions small and focused
  • Add JSDoc comments for complex functions

CSS/Tailwind

  • Use Tailwind utility classes
  • Follow mobile-first responsive design
  • Maintain consistent spacing and colors
  • Use custom classes sparingly

Git Best Practices

  • Write clear, descriptive commit messages
  • Keep commits atomic (one feature/fix per commit)
  • Pull latest changes before creating PR
  • Resolve conflicts before submitting PR

Reporting Bugs

Found a bug? Please create an issue with:

  • Clear, descriptive title
  • Steps to reproduce
  • Expected vs actual behavior
  • Screenshots (if applicable)
  • Your environment (OS, browser, Node version)

Feature Requests

Have an idea? We'd love to hear it! Open an issue with:

  • Clear description of the feature
  • Use cases and benefits
  • Potential implementation approach

License

This project is licensed under the ISC License.

ISC License

Copyright (c) 2025, Advanced Computer Lab - GUC

Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.

Contact

Development Team

German University in Cairo - Advanced Computer Lab 2025

Maintainers

For questions or support, please open an issue on GitHub or contact the development team.


Acknowledgments

Technologies

  • React - The amazing UI library
  • Express - Fast, unopinionated web framework
  • MongoDB - The database for modern applications
  • Stripe - Payment processing platform
  • Tailwind CSS - Utility-first CSS framework

Inspiration

  • GUC community needs and feedback
  • Modern event management platforms
  • Educational institution requirements

Special Thanks

  • German University in Cairo for supporting this project
  • Advanced Computer Lab instructors and TAs
  • All contributors and testers
  • Open source community

Made with ❀️ by the Advanced Computer Lab Team

⬆ Back to Top

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages