Student Notes Feature: - Add notes column to players table with migration - Create NotesModal component with zoom animation from student tile - Add notes button on each student card in StudentSelector - Support viewing and editing notes directly in modal - Fix modal reopening bug with pointerEvents during animation - Fix spring animation to start from clicked tile position BKT & Curriculum Improvements: - Add configurable BKT thresholds via admin settings - Add skill anomaly detection API endpoint - Add next-skill recommendation API endpoint - Add problem history API endpoint - Improve skills page with BKT classifications display - Add skill tutorial integration infrastructure Dashboard & Session Improvements: - Enhanced dashboard with notes tab - Improved session summary display - Add StartPracticeModal stories Test Infrastructure: - Add seedTestStudents.ts script for BKT manual testing - Add generateTrajectoryData.ts for simulation data 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
27 lines
1.0 KiB
SQL
27 lines
1.0 KiB
SQL
-- Custom SQL migration for skill_tutorial_progress table
|
|
-- Tracks tutorial completion status for each skill per player
|
|
|
|
CREATE TABLE `skill_tutorial_progress` (
|
|
`id` text PRIMARY KEY NOT NULL,
|
|
`player_id` text NOT NULL,
|
|
`skill_id` text NOT NULL,
|
|
`tutorial_completed` integer DEFAULT 0 NOT NULL,
|
|
`completed_at` integer,
|
|
`teacher_override` integer DEFAULT 0 NOT NULL,
|
|
`override_at` integer,
|
|
`override_reason` text,
|
|
`skip_count` integer DEFAULT 0 NOT NULL,
|
|
`last_skipped_at` integer,
|
|
`created_at` integer NOT NULL,
|
|
`updated_at` integer NOT NULL,
|
|
FOREIGN KEY (`player_id`) REFERENCES `players`(`id`) ON UPDATE no action ON DELETE cascade
|
|
);
|
|
--> statement-breakpoint
|
|
|
|
-- Index for fast lookups by player
|
|
CREATE INDEX `skill_tutorial_progress_player_id_idx` ON `skill_tutorial_progress` (`player_id`);
|
|
--> statement-breakpoint
|
|
|
|
-- Unique constraint: one record per player per skill
|
|
CREATE UNIQUE INDEX `skill_tutorial_progress_player_skill_unique` ON `skill_tutorial_progress` (`player_id`, `skill_id`);
|