Files
soroban-abacus-flashcards/apps/web/drizzle/0034_skill_tutorial_progress.sql
Thomas Hallock 2702ec585f feat(practice): add student notes with animated modal + BKT improvements
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>
2025-12-18 06:39:04 -06:00

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`);