Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
baa6a7f
EMS-143: Add frontend API clients for attendance tracking
Buffden Oct 29, 2025
36b1f69
EMS-143: Create attendance tracking UI components
Buffden Oct 29, 2025
a3d89cb
EMS-143: Add database schema changes and migrations for attendance tr…
Buffden Oct 29, 2025
627df60
EMS-143: Implement backend attendance tracking services and routes fo…
Buffden Oct 29, 2025
50571b4
EMS-143: Add new frontend components for live event management and at…
Buffden Oct 29, 2025
53c26a6
EMS-143: Update frontend dashboard pages and API client for attendanc…
Buffden Oct 29, 2025
faabba4
EMS-143: Update infrastructure configuration for attendance tracking …
Buffden Oct 29, 2025
ed18816
EMS-143: Make admin join view compact by default and remove compact p…
Buffden Oct 30, 2025
fefce85
EMS-143: Revert speaker-service to Debian base and Prisma debian-open…
Buffden Oct 30, 2025
cee0cee
EMS-143: Add RABBITMQ_URL env for speaker-service in docker-compose
Buffden Oct 30, 2025
04e2f13
EMS-143: Fix localStorage quota error with log size limits and add ad…
Buffden Oct 30, 2025
71aa6a7
EMS-143: Fix authorization header forwarding in nginx gateway and add…
Buffden Nov 2, 2025
759da94
EMS-143: Fix speaker service authentication and improve material hand…
Buffden Nov 2, 2025
b4495b7
EMS-143: Fix booking service routing and improve attendance tracking
Buffden Nov 2, 2025
9728e4c
EMS-143: Fix API client URL construction and attendance endpoints
Buffden Nov 2, 2025
174c6e0
EMS-143: Improve auditorium joining logic for all user roles
Buffden Nov 2, 2025
9b76e8c
EMS-143: Improve event details and auditorium display for all roles
Buffden Nov 2, 2025
4ded2cc
EMS-143: Fix speaker events page to show all published events
Buffden Nov 2, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions docker-compose.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ services:
args:
- DATABASE_URL=postgresql://admin:password@event-service-db:5432/event_db
container_name: event-service
environment:
- TZ=America/Chicago
env_file:
./ems-services/event-service/.env.production
networks:
Expand Down Expand Up @@ -132,6 +134,11 @@ services:
container_name: speaker-service
env_file:
./ems-services/speaker-service/.env.production
environment:
- RABBITMQ_URL=amqp://rabbitmq:5672
- UPLOAD_DIR=/app/uploads
volumes:
- speaker-uploads:/app/uploads # Persistent storage for uploaded materials
networks:
- event-net
depends_on:
Expand Down Expand Up @@ -237,5 +244,6 @@ volumes:
booking-service-data:
feedback-service-data:
speaker-service-data:
speaker-uploads: # Persistent storage for speaker uploaded materials
rabbitmq_data:
rabbitmq_log:
92 changes: 92 additions & 0 deletions docs/attendance-tracking-implementation-plan.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Attendance Tracking Implementation Plan

## 📋 **Core Requirements:**
- Real-time event joining system
- Live attendance tracking during events
- Speaker material management per event
- Minimal UI for attendees, informative for admin/speakers

## ⏰ **Event Joining Logic:**
- **Join Button**: Becomes active exactly when event starts (not 15 mins before)
- **Join Action**: Marks user as "attended" and "joined" simultaneously
- **Multiple Joins**: Allowed (user has valid ticket), but attendance count doesn't increase
- **Attendance Count**: Only increments on first join per user

## 👥 **User Roles & Permissions:**

### **Attendees:**
- Can join events when they start
- See basic attendance metrics (e.g., "45 people joined")
- Access speaker materials only during event
- Minimal UI design

### **Speakers:**
- Can join events when they start
- See complete attendance reports
- Manage materials in invitation section
- Cannot change materials once event starts
- Informative UI design

### **Admins:**
- See complete attendance reports
- Real-time attendance dashboard
- Material management oversight
- Informative UI design

## 📁 **Material Management:**
- **Location**: Speaker invitation section (where they receive admin invitations)
- **Selection**: Speakers choose materials per event via checkboxes
- **Timing**: Materials locked once event starts
- **Visibility**: Attendees can access materials during event only
- **Lifespan**: Materials accessible throughout event duration

## 📊 **Attendance Tracking:**
- **Real-time Count**: Live updates as users join
- **Duplicate Prevention**: Multiple joins don't increase count
- **Status Tracking**: Track both "attended" and "joined" status
- **Report Data**: Total attendance vs current attendance for mid-event reports

## 🎨 **UI Design Requirements:**
- **Attendees**: Minimal, clean interface
- **Speakers/Admins**: Informative, detailed interface
- **Real-time Updates**: Live attendance counters
- **Material Access**: Easy access during events

## 🔧 **Technical Implementation Plan:**

### **Phase 1: Database Schema**
- Add `joinedAt` timestamp to `Booking` model
- Add `speakerJoinedAt` timestamp to `SpeakerInvitation` model
- Add `materialsSelected` array to `SpeakerInvitation` model
- Add `eventStartTime` validation for join button

### **Phase 2: API Endpoints**
- `POST /events/:eventId/join` - Attendee joins event
- `POST /events/:eventId/speaker-join` - Speaker joins event
- `GET /events/:eventId/live-attendance` - Real-time attendance data
- `PUT /speaker-invitations/:id/materials` - Update material selection

### **Phase 3: Frontend Implementation**
- Event joining interface with time-based access
- Live attendance dashboard
- Speaker material selection in invitation section
- Real-time updates and minimal UI design

## ⚠️ **Edge Cases to Handle:**
- User joins multiple times (prevent count increase)
- Event starts while user is on page (enable join button)
- Speaker changes materials after event starts (prevent)
- Materials access timing (only during event)
- Real-time updates for all user types

## 📈 **Future Report Implementation:**
- Total attendance vs current attendance
- Mid-event report generation
- Historical attendance data
- Export functionality

---

**Status**: Ready for implementation
**Created**: $(date)
**Last Updated**: $(date)
122 changes: 122 additions & 0 deletions docs/professor-scope-requirements.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
# Professor's Scope Requirements
## Event Management System - Official Project Scope

**Document Version**: 1.0
**Created**: January 2024
**Source**: Professor's Raw Requirements
**Status**: Official Project Scope

---

## **Official Project Scope**

The Event Management System must implement the following features:

### **1. Event Creation**
- Admin can create and manage events
- Event lifecycle management
- Event status management (Draft, Published, etc.)

### **2. Registration System**
- Users can register online for events
- Registration management
- Waitlist handling when capacity is reached

### **3. Speakers**
- Speakers can search and get invited to events
- Speakers can upload slides (presentation materials)
- Speakers can receive messages from the admin
- Speaker management and assignment

### **4. Ticketing**
- Generate and manage digital tickets
- QR code generation and validation
- Ticket lifecycle management

### **5. Schedule Management**
- Manage event timing and sessions
- Session creation within events
- Speaker assignment to sessions

### **6. Attendee Tracking**
- Monitor attendance and check-ins
- QR code scanning at venue
- Attendance recording and tracking

### **7. Notifications**
- Send alerts about upcoming events or changes
- Email notifications for various events
- System-generated alerts

### **8. Feedback Collection**
- Attendees can submit feedback
- Feedback forms and collection
- Post-event feedback system

### **9. Reporting**
- Generate event attendance reports
- Generate performance reports
- Basic analytics and reporting

---

## **Scope Boundaries**

### **✅ IN SCOPE**
- Basic event management
- User registration and booking
- Speaker invitation and management
- Digital ticketing with QR codes
- Session management within events
- Basic attendance tracking
- Email notifications
- Basic feedback collection
- Basic reporting

### **❌ OUT OF SCOPE**
- Multi-track event management
- Speaker rating systems
- Advanced material access control
- Backup speaker management
- Complex scheduling algorithms
- Real-time dashboards
- Advanced communication systems
- Enterprise-level features
- Advanced analytics
- Multi-tenant systems

---

## **Implementation Priority**

Based on the professor's scope, the implementation should focus on:

1. **Core Event Management** (Already implemented)
2. **Speaker Management System** (Search, invite, messaging, slides)
3. **Session Management** (Sessions within events)
4. **Basic Attendance Tracking** (Check-in system)
5. **Feedback Collection** (Post-event feedback)
6. **Basic Reporting** (Attendance and performance reports)

---

## **Success Criteria**

The system will be considered complete when:

- [ ] Admins can create and manage events
- [ ] Users can register for events online
- [ ] Speakers can be searched and invited to events
- [ ] Speakers can upload slides and receive admin messages
- [ ] Digital tickets are generated and managed
- [ ] Event timing and sessions are managed
- [ ] Attendance and check-ins are monitored
- [ ] Notifications are sent for events and changes
- [ ] Attendees can submit feedback
- [ ] Basic reports are generated

---

**Document Status**: Official Project Scope
**Last Updated**: January 2024
**Approved By**: Professor
12 changes: 12 additions & 0 deletions ems-client/app/dashboard/admin/events/[id]/live/page.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
'use client';

import { LiveEventAuditorium } from "@/components/events/LiveEventAuditorium";
import { withAdminAuth } from "@/components/hoc/withAuth";

const AdminLiveAuditoriumPage = () => {
return (
<LiveEventAuditorium userRole="ADMIN" />
);
};

export default withAdminAuth(AdminLiveAuditoriumPage);
Loading