A comprehensive web application for analyzing student performance and dynamic activity patterns. Built with Next.js, Radix UI, and Chart.js.
-
Performance Segmentation
- Static performance profiles based on grades, attempts, persistence, and meeting attendance
- Activity-derived metrics (effort, consistency, struggle) computed from submissions
- Segments learners into categories like "Leader efficient", "Balanced middle", etc.
- Based on the algorithm in
docs/student-segment.md
-
Dynamic/Easing Segmentation
- Temporal activity analysis with CSS-like easing patterns
- Activity derived from submissions (correct=1.0, incorrect=0.25) + meetings
- Classifies cumulative behavior curves (linear, ease, ease-in, ease-out, ease-in-out)
- Calculates frontload index, Bezier control points, consistency, and burstiness
- Based on the algorithm in
docs/easing_activity_algorithm_node.md
-
Upload - Upload 3-5 CSV files:
grade_book.csv(Required): user_id, totallearners.csv(Required): user_id, first_name, last_namesubmissions.csv(Required): user_id, step_id, status, timestampmeetings.csv(Optional): user_id, name, [dd.mm.yyyy] columnsstructure.csv(Optional): course_id, module_id, lesson_id, step_id - enables clickable topic links to Cogniterra
Note: CSV files can use either comma (
,) or semicolon (;) as delimiter. The system automatically detects the correct delimiter. -
Review - Verify column recognition and preview data
-
Exclusions - Optionally exclude specific user IDs
-
Settings - Configure:
- Time bucketing (Daily/Weekly)
- Smoothing (Off/Light/Strong)
- Meetings usage toggles
- Alpha/Beta weights (for activity blending)
-
Processing - Automated data processing with progress tracking
-
Results - View results in two modes:
- Performance Segmentation: tables, filters, segment distribution
- Dynamic/Easing: curves, charts, easing patterns
- NEW: Click any student name to view personalized report
Feature: Individual student detail pages with comprehensive, actionable insights.
Access: Click on any student's name in the results tables (both Performance and Dynamic tabs).
What's Included:
- π Progress Highlights: 3-5 key wins and focus areas in plain English
- π₯ Overall Engagement: Program-wide engagement level (High/Medium/Low) with description
- π Activity Curve: Visual timeline with frontload index, consistency, burstiness
- β¨ Going Well Topics: Areas where student excels
- π― Focus Areas: Topics needing attention with specific reasons
- π Next Steps: 2-3 prioritized, actionable suggestions
- π Topic Analysis Table: Detailed breakdown with deltas from course average
- Clickable topic links to Cogniterra (when structure.csv is uploaded)
- π Full Statistics: All performance metrics in one view
Algorithm: Based on Personal Student Report Algorithm v1 (see docs/personal_student_report_algorithm.md)
Language: Student-friendly, supportive, actionable - no heavy statistics or rankings
Learn More: See docs/student-report-feature-guide.md for complete documentation
Feature: Automatically generate comprehensive, human-friendly reports for managers and students using LiteLLM (GPT-4 via Hyperskill proxy).
Manager Reports:
- π Executive summary of cohort performance
- π₯ Group dynamics and engagement analysis
- π Learning outcomes and project evaluation
- π¬ Expert observations synthesis
- π― Opportunities and recommendations
Student Reports:
- π Personalized learning journey overview
- πͺ Strengths and achievements
- π Skills development analysis
- π¨βπ« Instructor feedback
- π Growth opportunities and next steps
Key Benefits:
- β‘ Auto-generates from raw data in seconds
- βοΈ Fully editable before publishing
- π Draft/publish workflow for quality control
- π― Tailored language for different audiences
- π° Cost-effective (~$0.01-$0.05 per report)
Setup: See docs/LLM_SETUP.md for quick start guide
Full Documentation: See docs/llm-reports-feature.md for complete details
- Node.js 18+ and npm/yarn/pnpm
# Install dependencies
npm install
# Run development server
npm run devOpen http://localhost:3000 to view the application.
# Build the application
npm run build
# Start production server
npm start- Framework: Next.js 14 (App Router)
- UI Library: Radix UI Themes + Radix Primitives
- Charts: Chart.js + React Chart.js 2
- Styling: CSS Modules (no Tailwind)
- Language: TypeScript
- Data Processing: CSV Parse/Stringify, Day.js
/app
/upload - File upload screen
/review - Data review screen
/exclusions - User exclusion screen
/settings - Display settings
/processing - Data processing
/results - Results display (dual mode)
/components - Reusable components
layout.tsx - Root layout with theme provider
page.tsx - Home (redirects to upload)
/lib
/context - React Context for state management
/processors - Data processing algorithms
/utils - Helper functions
types.ts - TypeScript type definitions
/docs - Algorithm documentation
Implements the logic from docs/student-segment.md:
- Data normalization - Standardizes column names
- Core metrics - Calculates total, submissions, unique_steps, correct_submissions
- Derived metrics - success_rate, persistence, efficiency
- Temporal metrics - active_days, active_days_ratio (from submission timestamps)
- Activity-derived signals - effort_index, consistency_index, struggle_index
- Effort: z-score normalized (submissions + active_days)
- Consistency: active_days / span_days
- Struggle: based on high persistence + low success rate
- Meeting processing - Attendance percentages
- Segmentation - Rule-based classification with activity-driven rules
Implements the logic from docs/easing_activity_algorithm_node.md:
- Daily activity from submissions - Weighted by status (correct=1.0, incorrect=0.25)
- Composite activity -
Ξ± * platform_events + Ξ² * meetings(Ξ±=1.0, Ξ²=1.5) - Cumulative curve normalization - Maps to [0,1] Γ [0,1]
- Bezier proxy estimation - Via quartiles (t25, t50, t75)
- Frontload index - FI = 0.5 - t50
- Easing classification - Matches to CSS easing patterns
- Auxiliary metrics - consistency, burstiness from daily activity
user_id,total
123,85
456,72
user_id,first_name,last_name
123,John,Doe
456,Jane,Smith
user_id,step_id,status,timestamp
123,step_1,correct,2024-01-15T10:30:00Z
123,step_2,incorrect,2024-01-16T14:20:00Z
Note: Timestamps can be Unix epoch (seconds or milliseconds) or ISO strings.
user_id,name,[15.01.2024] Webinar,[22.01.2024] Workshop
123,John Doe,TRUE,FALSE
456,Jane Smith,TRUE,TRUE
β
Multi-step file upload with validation
β
CSV parsing with flexible column names
β
User ID exclusion system
β
Display settings configuration
β
Performance segmentation with activity signals
β
Dynamic/easing segmentation from submissions
β
Dual-mode results display
β
Interactive filtering and search
β
Data visualization with Chart.js
β
Responsive tables with scrolling
- β NO activity.csv required - Everything built from submissions
- β Activity from submissions: Uses weighted attempts (correct=1.0, incorrect=0.25)
- β Two-source blending: platform_events + meetings (no separate activity file)
- β New metrics: consistency, burstiness in Dynamic mode
- β Enhanced Performance: effort/consistency/struggle indices from submissions
Platform Activity per Day = Ξ£(correct: 1.0, incorrect: 0.25)
Composite Activity = Ξ± * Platform + Ξ² * Meetings
where Ξ±=1.0 (platform weight), Ξ²=1.5 (meetings weight)
- No Tailwind CSS: Uses CSS Modules as specified in requirements
- Radix UI: Provides accessible, unstyled primitives and themed components
- Client-side processing: All data processing happens in the browser
- React Context: Simple state management without external libraries
- TypeScript: Full type safety throughout the application
- No external activity files: All metrics derived from existing data
AppContext- Global state managementFileUploadTile- Drag-and-drop CSV uploadPerformanceResults- Performance segmentation displayDynamicResults- Dynamic segmentation displayEasingChart- Line chart for cumulative curves
This project follows the specifications in:
docs/unified_app_ui_userflow.md- UX flowdocs/student-segment.md- Performance algorithm (v3)docs/easing_activity_algorithm_node.md- Dynamic algorithm (v3)docs/RADIX_UI_DOCUMENTATION.md- UI componentsdocs/REACT_CHARTJS_DOCUMENTATION.md- Charts
Private project - All rights reserved
- The app uses Next.js App Router (not Pages Router)
- All pages are client components (
'use client') - Data processing is synchronous (could be moved to Web Workers)
- Tables show first 100 rows for performance
- CSV files are parsed entirely into memory
- Activity metrics are computed on-the-fly from submissions
- Ensure files are valid CSV format
- Check that required columns exist
- File size should be reasonable (< 10MB recommended)
- Comments (lines starting with #) are automatically filtered
- Verify all required files are uploaded (grade_book, learners, submissions)
- Check CSV format and column names
- Look at browser console for detailed errors
- Ensure submissions.csv has valid timestamps
- Ensure submissions.csv has timestamp column
- Check that data was successfully processed
- Try refreshing the page
For issues or questions, refer to:
app-creation-log.md- Detailed implementation notes- Documentation files in
/docs - Component source code with inline comments