Overview
The learning experience is the core of SkillRise’s student platform. The player page (/player/{courseId}) combines a full-featured video player, organized chapter navigation, real-time progress tracking, and integrated quizzes into a seamless learning environment.
Player Page Layout
The player uses a responsive two-column layout:
Left Column (Video & Controls)
- Custom video player with full controls
- Current lecture information card
- Mark complete button
- Course rating widget
- Progress bar with percentage
- Certificate button (when complete)
- Collapsible chapter list
- Quiz buttons per chapter
Video Player Component
SkillRise features a custom-built video player with professional controls:Player Features
Playback Controls
- Play/Pause toggle
- 10-second skip forward/backward
- Seek bar with progress indicator
- Keyboard shortcuts (Space, Arrow keys)
Audio Controls
- Mute/unmute toggle
- Volume slider (0-100%)
- Visual volume level indicator
- Persists across lectures
Speed Control
- 0.5× to 2× playback speeds
- 6 preset options
- Dropdown selector
- Smooth speed transitions
Display Options
- Fullscreen mode
- Quality selector (Auto, 1080p, 720p, 480p, 360p, 240p)
- Auto-hide controls when playing
- Responsive aspect ratio
Custom Controls Implementation
The player uses ReactPlayer as the video engine but implements custom controls:Keyboard Shortcuts
- Spacebar
- Left Arrow
- Right Arrow
Play/Pause ToggleQuick start/stop without mouse interaction
Skip Hint Overlay
When using keyboard shortcuts, a visual hint appears:
Lecture Selection
Chapter Structure Display
Courses are organized into chapters, each containing multiple lectures:Chapter Accordion
The sidebar displays collapsible chapters:- Chapter header - Click to expand/collapse
- Lecture count - Number of lessons in chapter
- Chevron icon - Rotates when expanded
- Lecture list - Shows when chapter is open
Lecture Items
Each lecture in the list shows:Auto-selection Logic
When opening a course, the player intelligently selects a lecture:Progress Tracking
Progress Bar
The top of the sidebar shows overall course progress:
Displays:
- “Your progress” label - Section header
- Percentage - Bold, teal number (e.g., “67%”)
- Progress bar - Visual indicator with smooth animation
- Lecture count - “12 of 18 lectures completed”
Mark Complete Button
Below the video player, a card shows the current lecture with a completion button: Button States:- Not Completed
- Completed
Progress API Call
Marking a lecture complete triggers:- Success toast: “Course completed. Certificate ready.”
- Certificate button appears in sidebar
- Progress bar animates to 100%
Quiz Integration
Chapter Quiz Unlock
Quiz buttons appear when all lectures in a chapter are marked complete:Quiz Button Display
Button variations:
Quiz Result Badges
After taking a quiz, a colored badge shows the result:Mastered
76-100%Green badge: ”🏆 Mastered”
On Track
41-75%Yellow badge: ”🎯 On Track”
Needs Review
0-40%Red badge: ”📖 Needs Review”
Rating System
Below the lecture controls, students can rate the course:Rating Widget
Features:
- 5 interactive stars - Click to rate 1-5
- Hover preview - Stars light up on hover
- Current rating - Pre-filled if user already rated
- Instant update - Saves on click
Rating Persistence
Certificate Generation
Certificate Button
When course is 100% complete, a certificate card appears:Certificate Download Flow
Backend Generation
- Verifies 100% completion
- Generates PDF with student name, course title, date
- Uploads to cloud storage
- Returns PDF URL
Certificates are generated on-demand and cached. First request may take 2-3 seconds while the PDF is created.
Persistence Features
Last Played Lecture
The player remembers where you left off:- Resume exactly where you stopped
- Works across browser sessions
- Chapter auto-expands to show current lecture
Video Playback Position
ReactPlayer maintains playback position during:- Speed changes
- Quality adjustments
- Fullscreen toggles
- Volume modifications
Mobile Experience
Responsive Layout
- Desktop (lg+)
- Tablet (md)
- Mobile (sm)
Two columns side-by-side
- Video player: 60% width
- Sidebar: 40% width (sticky)
Touch Optimizations
- Large touch targets - All buttons 44px+ height
- Swipe gestures - Disabled to prevent conflicts
- Auto-hide controls - 2.5 second delay
- Tap to show controls - Single tap reveals interface
Performance Optimizations
Lazy Loading
Lazy Loading
Video player only initializes when component mounts. ReactPlayer handles lazy loading of video source.
Memoized Calculations
Memoized Calculations
Progress percentages and completion states are memoized to prevent recalculation on every render.
Debounced Progress Updates
Debounced Progress Updates
Progress bar only updates every 100ms during playback to reduce re-renders.
Optimistic UI
Optimistic UI
Mark complete button updates UI immediately, API call happens in background.
Accessibility Features
Keyboard navigation for all video controls
ARIA labels on interactive elements
Focus management for modal dialogs
Screen reader announcements for state changes
Sufficient color contrast (WCAG AA compliant)
Related Features
- AI Assistant - Get help while learning
- Progress Tracking - View all enrolled courses
- Enrolling Courses - Start your learning journey