A comprehensive campus management platform for the German University in Cairo (GUC)
Assemble is a full-stack web application designed to streamline campus activities, event management, facility bookings, and vendor marketplace operations. It serves as a unified platform for students, faculty, staff, and vendors to interact with various campus services including workshops, conferences, trips, court reservations, fitness sessions, and vendor marketplace participation.
- Motivation
- Build Status
- Code Style
- Screenshots
- Tech/Framework Used
- Features
- Code Examples
- Installation
- API Reference
- Tests
- How to Use
- Contribute
- Credits
- License
The German University in Cairo needed a centralized platform to manage the diverse range of campus activities and services. Traditional methods of managing events, registrations, facility bookings, and vendor participation were fragmented and inefficient. Assemble was created to:
- Centralize Campus Operations: Provide a single platform for all campus activities, reducing administrative overhead and improving user experience
- Streamline Event Management: Enable efficient creation, approval, and management of workshops, conferences, trips, and bazaars
- Facilitate Vendor Participation: Simplify vendor applications for bazaars and platform booth setups with automated approval workflows
- Enhance User Experience: Offer seamless registration, payment processing, and facility booking capabilities
- Improve Communication: Implement notification systems to keep all stakeholders informed about events and updates
Current Version: 1.0.0
- Backend API: Fully functional with comprehensive endpoints
- Frontend Application: Complete with modern UI/UX
- Database: MongoDB schema implemented and documented
- Payment Integration: Stripe integration complete
- Email Services: Automated email notifications operational
- Authentication: JWT-based authentication system active
- Test suite is not yet implemented (see Tests section)
- Some advanced features may require additional configuration
- Production deployment configurations need environment-specific setup
This project follows consistent coding standards:
- TypeScript: Strict type checking enabled
- ESLint: Configured for both frontend and backend
- Naming Conventions:
- Files: camelCase (e.g.,
event.controller.ts) - Classes: PascalCase (e.g.,
EventController) - Variables/Functions: camelCase (e.g.,
getAllEvents)
- Files: camelCase (e.g.,
- Architecture: Layered architecture (Models β Services β Controllers β Routes)
- Documentation: JSDoc comments for API endpoints (Swagger integration)
- Backend: TypeScript with ESLint
- Frontend: Next.js ESLint configuration
- Formatting: Prettier (recommended)
Welcome page with feature overview and user role information
Role-based dashboards for different user types
Intuitive event creation and browsing interface
Streamlined vendor application and management
Secure Stripe payment integration
Real-time availability and reservation system
Real-time availability and reservation system
Note: To add screenshots, place image files in the
docs/screenshots/directory and update the paths above. Supported formats: PNG, JPG, GIF, SVG.
| Technology | Version | Purpose |
|---|---|---|
| Node.js | Latest LTS | Runtime environment |
| Express.js | ^5.1.0 | Web framework |
| TypeScript | ^5.9.3 | Type-safe JavaScript |
| MongoDB | Latest | Database |
| Mongoose | ^8.19.1 | ODM for MongoDB |
| JWT | ^9.0.2 | Authentication |
| bcryptjs | ^3.0.2 | Password hashing |
| Stripe | ^19.1.0 | Payment processing |
| Nodemailer | ^7.0.7 | Email services |
| Multer | ^2.0.2 | File uploads |
| Joi | ^18.0.1 | Input validation |
| Swagger | Latest | API documentation |
| ExcelJS | ^4.4.0 | Excel report generation |
| qrcode | ^1.5.4 | QR code generation |
| Helmet | ^8.1.0 | Security headers |
| CORS | ^2.8.5 | Cross-origin resource sharing |
| Technology | Version | Purpose |
|---|---|---|
| Next.js | 15.5.4 | React framework |
| React | 19.1.0 | UI library |
| TypeScript | 5.9.3 | Type-safe JavaScript |
| Tailwind CSS | ^4 | Utility-first CSS |
| shadcn/ui | Latest | Component library |
| Axios | ^1.12.2 | HTTP client |
| Stripe.js | ^8.5.2 | Payment integration |
| Lucide React | ^0.544.0 | Icons |
| Zod | ^4.1.12 | Schema validation |
| date-fns | ^4.1.0 | Date utilities |
- Concurrently: Run multiple npm scripts simultaneously
- Nodemon: Auto-restart backend during development
- ts-node: TypeScript execution for Node.js
- Create and manage workshops, conferences, trips, bazaars, and platform booths
- Event approval workflows for Events Office
- Search, filter, and sort events by multiple criteria
- Event archiving and status management
- Role-based event restrictions
- Multi-role user system (Students, Staff, TAs, Professors, Admins, Event Office, Vendors)
- Email verification system
- GUC email validation for campus users
- JWT-based session management
- Password reset functionality
- Vendor application system for bazaars and platform booths
- Document upload and verification (tax cards, logos, IDs)
- Platform booth slot selection with multi-slot booking
- Automated approval/rejection workflows
- QR code generation for vendor attendees
- Stripe integration for credit/debit card payments
- In-app wallet system for users
- Payment receipts via email
- Refund processing (2 weeks before event)
- Vendor participation fee management
- Court Reservations: Basketball, tennis, and football court bookings
- Real-time availability checking
- Reservation management and cancellation
- Gym Sessions: Group fitness session registration
- Capacity management and attendance tracking
- Faculty-led workshop creation
- Certificate generation and email delivery
- Attendance tracking
- Workshop-specific registration workflows
- Email notifications for events, approvals, payments
- In-app notification preferences
- Automated reminders and updates
- Status change notifications
- User management and role assignment
- Event approval and management
- Vendor request processing
- Report generation (Excel export)
- System analytics
- Event polling system
- Rating and comment functionality
- User feedback collection
- Save favorite events for quick access
- Personalized event recommendations
Register for an Event:
// POST /registrations
{
"eventId": "507f1f77bcf86cd799439011",
"paymentMethod": "wallet",
"specialRequirements": "Vegetarian meal preference"
}Create an Event (Events Office):
// POST /events
{
"name": "Spring Bazaar 2025",
"eventType": "bazaar",
"shortDescription": "Annual spring shopping event",
"location": "GUC Main Campus - Plaza",
"startDateTime": "2025-04-20T10:00:00Z",
"endDateTime": "2025-04-22T18:00:00Z",
"registrationDeadline": "2025-04-15T23:59:59Z"
}Vendor Application:
// POST /vendor/apply-bazaar
{
"eventId": "507f1f77bcf86cd799439011",
"boothSize": "4x4",
"attendees": [
{
"name": "John Doe",
"email": "john@vendor.com"
}
]
}Event Registration Component:
// Using Axios to register for an event
const registerForEvent = async (eventId: string) => {
try {
const response = await axios.post('/registrations', {
eventId,
paymentMethod: 'wallet'
});
console.log('Registration successful:', response.data);
} catch (error) {
console.error('Registration failed:', error);
}
};Before installing, ensure you have the following software installed:
- Node.js: v16 or higher (Download)
- MongoDB: v5.0 or higher (Download or use MongoDB Atlas)
- npm: Comes with Node.js (or use yarn)
- Git: For cloning the repository (Download)
git clone https://github.com/Advanced-Computer-Lab-2025/Assemble.git
cd AssembleInstall dependencies for root, backend, and frontend:
npm run install:allThis command will:
- Install root dependencies
- Install backend dependencies
- Install frontend dependencies
Backend Configuration:
cd backend
copy .env.example .envEdit backend/.env with your configuration:
# Server Configuration
PORT=5000
FRONTEND_URL=http://localhost:3000
# Database
MONGODB_URI=mongodb://localhost:27017/assemble
# Or for MongoDB Atlas:
# MONGODB_URI=mongodb+srv://username:password@cluster.mongodb.net/assemble
# JWT Authentication
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
JWT_EXPIRES_IN=7d
# Email Configuration (Nodemailer)
EMAIL_HOST=smtp.gmail.com
EMAIL_PORT=587
EMAIL_USER=your-email@gmail.com
EMAIL_PASS=your-app-password
EMAIL_FROM=noreply@assemble.guc.edu.eg
# Stripe Payment
STRIPE_SECRET_KEY=sk_test_your_stripe_secret_key
STRIPE_WEBHOOK_SECRET=whsec_your_webhook_secret
# File Upload
MAX_FILE_SIZE=5242880
UPLOAD_PATH=./uploadsFrontend Configuration:
cd ../frontend
copy .env.example .env.localEdit frontend/.env.local:
NEXT_PUBLIC_API_URL=http://localhost:5000
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_your_stripe_publishable_keyOption A: Local MongoDB
- Install MongoDB from mongodb.com
- Start MongoDB service:
# Windows net start MongoDB # macOS/Linux sudo systemctl start mongod
Option B: MongoDB Atlas (Cloud)
- Create a free account at MongoDB Atlas
- Create a new cluster
- Get your connection string and add it to
backend/.env
Development Mode (Both Frontend & Backend):
# From root directory
npm run devThis will start:
- Backend: http://localhost:5000
- Frontend: http://localhost:3000
Run Individually:
# Backend only
npm run dev:backend
# Frontend only
npm run dev:frontendTo populate the database with sample data for testing:
# Make a POST request to /seed endpoint
curl -X POST http://localhost:5000/seedThis creates:
- Sample student and vendor accounts
- Sample events (bazaars, booths)
- Sample vendor requests
- Platform booth slots
Test Credentials:
- Student:
test@student.guc.edu.eg/TestPass123! - Vendor:
vendor@company.com/VendorPass123!
- Development:
http://localhost:5000 - Production: (Configure in environment variables)
Most endpoints require authentication via JWT token. Include the token in the request:
Authorization: Bearer <your-jwt-token>Or via cookie (automatically handled by the frontend).
POST /auth/register- User registrationPOST /auth/login- User loginPOST /auth/logout- User logoutPOST /auth/verify-email- Email verificationPOST /auth/forgot-password- Password reset requestPOST /auth/reset-password- Reset password
GET /events/all- Get all events (with search, filter, sort, pagination)GET /events/:id- Get event detailsPOST /events- Create event (Events Office only)PUT /events/:id- Update event (Events Office only)DELETE /events/:id- Delete event (Admin/Events Office)
POST /registrations- Register for an eventGET /registrations- Get user's registrationsDELETE /registrations/:id- Cancel registration
POST /payments/create-payment-intent- Create Stripe payment intentPOST /payments/confirm- Confirm paymentGET /payments- Get payment historyGET /payments/wallet- Get wallet balance
POST /vendor/apply-bazaar- Apply for bazaar participationPOST /vendor/apply-platform-booth- Apply for platform boothGET /vendor/requests- Get vendor requestsPOST /vendor/upload-documents- Upload vendor documents
GET /courts- Get all courts with availabilityPOST /courts/reserve- Reserve a court
GET /workshops- Get all workshopsPOST /workshops- Create workshop (Professors only)GET /workshops/:id/certificate- Download certificate
GET /admin/users- Get all usersPOST /admin/assign-role- Assign user roleGET /admin/vendor-requests- Get all vendor requestsPOST /admin/approve-vendor- Approve vendor requestPOST /admin/reject-vendor- Reject vendor request
GET /notifications- Get user notificationsPUT /notifications/:id/read- Mark notification as readPUT /notifications/preferences- Update notification preferences
GET /reports/events- Export events report (Excel)GET /reports/registrations- Export registrations report
Interactive API documentation is available via Swagger UI when the backend is running:
Swagger UI: http://localhost:5000/docs
Success Response:
{
"status": "success",
"message": "Operation completed successfully",
"data": { ... }
}Error Response:
{
"status": "error",
"message": "Error description",
"error": "Detailed error information"
}- Sign Up: Create an account using your GUC email (
@student.guc.edu.eg) - Verify Email: Check your email and click the verification link
- Browse Events: Explore workshops, trips, conferences, and bazaars
- Register: Register for events you're interested in
- Make Payment: Pay using Stripe or your wallet balance
- Book Facilities: Reserve courts or join gym sessions
- View Certificates: Download workshop certificates after completion
- Get Account: Request account creation from Admin
- Create Workshops: Create and manage your workshops
- Track Attendance: Monitor workshop registrations
- Generate Certificates: Automatically generate certificates for participants
- Get Account: Request account creation from Admin
- Organize Events: Create and manage campus events
- Manage Registrations: View and manage event registrations
- Get Account: Admin creates your account
- Create Events: Create bazaars, trips, conferences
- Approve Events: Review and approve event submissions
- Manage Vendors: Process vendor applications
- Generate Reports: Export event and registration reports
- Sign Up: Create vendor account with company email
- Upload Documents: Upload tax card and company logo
- Apply for Events: Apply to participate in bazaars or set up platform booths
- Select Slots: Choose booth locations for platform booths
- Make Payment: Pay participation fees upon approval
- Manage Attendees: Upload attendee IDs and manage participation
- Manage Users: Create accounts, assign roles, manage user status
- Approve Vendors: Review and approve/reject vendor applications
- System Management: Access admin dashboard for system-wide operations
- Generate Reports: Export comprehensive system reports
We welcome contributions! Here's how you can help:
- Fork the Repository: Create your own fork of the project
- Create a Branch: Create a feature branch from
maingit checkout -b feature/your-feature-name
- Follow Code Style: Adhere to the project's code style and conventions
- Write Clean Code: Write readable, well-documented code
- Test Your Changes: Ensure your changes work correctly
- Update Documentation: Update relevant documentation
- Commit Changes: Write clear, descriptive commit messages
git commit -m "Add feature: description of changes" - Push and Create Pull Request: Push to your fork and create a PR
- Create feature branch from
main - Make changes in appropriate directory (backend/frontend)
- Test locally using
npm run dev - Ensure no linter errors
- Commit with descriptive messages
- Push and create Pull Request
- All PRs require review before merging
- Ensure all checks pass (linting, type checking)
- Address review comments promptly
If you find a bug or have a feature request:
- Check existing issues to avoid duplicates
- Create a new issue with:
- Clear description
- Steps to reproduce (for bugs)
- Expected vs actual behavior
- Environment details
Assemble
- Next.js: nextjs.org - React framework
- Express.js: expressjs.com - Web framework
- MongoDB: mongodb.com - Database
- Stripe: stripe.com - Payment processing
- Tailwind CSS: tailwindcss.com - CSS framework
- shadcn/ui: ui.shadcn.com - Component library
- TypeScript: typescriptlang.org - Type-safe JavaScript
- University campus management systems
- Modern event management platforms
- E-commerce marketplace patterns
This project is licensed under the ISC License.
ISC License
Copyright (c) 2025, Advanced Computer Lab 2025
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.
For questions, issues, or contributions:
- GitHub Issues: Create an issue
- Repository: GitHub Repository
- Initial release
- Core event management functionality
- User authentication and authorization
- Vendor marketplace system
- Payment integration (Stripe + Wallet)
- Facility booking (Courts & Gym)
- Workshop management with certificates
- Notification system
- Admin dashboard
- API documentation (Swagger)
Last Updated: 2025
Maintained by: Advanced Computer Lab 2025