Page: Session Room
Code: SROM Route: /session/[id] Access: Authenticated Priority: P0 Status: In Scope
Purpose
Video conferencing interface for 1-on-1 tutoring sessions between students and Student-Teachers, powered by VideoProvider (BBB or PlugNmeet).
Connections
Incoming (users arrive from)
| Source | Trigger | Notes |
| SDSH | "Join Session" button | Student joining |
| TDSH | "Join Session" button | ST joining |
| NOTF | Session reminder notification | Direct join |
| (Email) | Email reminder link | Direct join |
Outgoing (users navigate to)
| Target | Trigger | Notes |
| SDSH | "Back to Dashboard" / session ends (Student) | Return to dashboard |
| TDSH | "Back to Dashboard" / session ends (ST) | Return to dashboard |
| CCNT | "Back to Course" | Return to course content |
| (Feedback) | Session ends | Post-session feedback modal |
Data Requirements
| Entity | Fields Used | Purpose |
| sessions | id, scheduled_start, scheduled_end, bbb_meeting_url, status | Session info |
| users (student) | name, avatar | Participant display |
| users (teacher) | name, avatar | Participant display |
| courses | title | Context display |
| enrollments | course_id | Course context |
| session_resources | id, name, type, r2_key, duration_seconds | Session resources |
Sections
Pre-Join Screen (Before Video Starts)
- • **Session Info:**
- • **Device Check:**
- • **Ready Actions:**
- • **Tips:**
Video Room (Main Session)
- • **Video Area:**
- • **Controls Bar:**
- • **Side Panel (Optional):**
- • **Session Timer:**
Session Header
- • Course title
- • Participant name
- • Session status indicator
Post-Session Screen
- • "Session Ended"
- • **Quick Feedback:**
- • **Actions:**
- • **Session Resources:**
- • **Upload Resources (ST only):**
User Stories Fulfilled
- • US-S042: Join scheduled session
- • US-S043: Participate in video session
- • US-V001: Access video conferencing
- • US-V005: Access session recordings (if enabled)
- • US-V006: Rate session after completion
- • US-T007: ST conducts teaching session
States & Variations
| State | Description |
| Early | Session not yet joinable (>15 min before) |
| Joinable | Within join window, pre-join screen |
| In Progress | Active video session |
| Waiting | One participant waiting for other |
| Ended | Post-session feedback screen |
| No Show | Other participant didn't join |
| Technical Issues | Connection problems, retry options |
Mobile Considerations
- • Full-screen video by default
- • Controls at bottom, auto-hide
- • Portrait: stacked videos
- • Landscape: side-by-side
- • Minimize to picture-in-picture
Error Handling
| Error | Display |
| Session not found | "Session not found. Check your dashboard." |
| Not authorized | "You're not part of this session." |
| Session expired | "This session has ended." |
| Connection failed | "Unable to connect. [Retry]" |
| Camera/mic denied | "Please allow camera/microphone access." |
| Video provider error | "Video service unavailable. Try again." |
Analytics Events
| Event | Trigger | Data |
`page_view` | Page load | session_id, user_role |
`session_joined` | Entered video room | session_id, time_before_start |
`session_started` | Both participants present | session_id |
`session_ended` | Session concluded | session_id, duration |
`feedback_submitted` | Rating submitted | session_id, rating |
`tech_issue` | Connection problem | error_type |
Notes
- • **VideoProvider:** PlugNmeet (selected per `assets/video-platform-decisions.md`)
- • CD-007: 1-on-1 optimized, P2P when possible
- • Recording storage: PlugNmeet → R2 replication
- • Session reminders: 24h, 1h, 15min before (via Resend)
- • Consider "reschedule" option from pre-join if issues
- • Accessibility: Keyboard navigation, screen reader support for controls