feat: Round 22 - Exam calendar, parent portal, teacher grading, deep styling

- Exam calendar integration: Plan Exam button, countdown badges, exam filter
- Parent portal: Children overview, illness approvals, grades, attendance
- Teacher grading: Stylus annotation, AI review, bulk grading mode
- Deep schlaukopf crawling: AI-powered content extraction from schlaukopf.de
- Dashboard: Upcoming exams, AI tips section
- Settings: AI provider config, virtual character toggle, management tabs
- Layout: Favorites section, notification badges on sidebar items
- Auth: VICE_PRINCIPAL demo account, feature showcase
- Attendance: Illness report integration
- Assessments: Plan exam button, AI test generation
- Fixed schoolId auto-detect in counseling and disciplinary APIs
- Added MessageSquare import to settings-view
- 150+ new i18n keys
This commit is contained in:
Mustafa Cetin committed 2026-07-29 20:47:43 +00:00
1 parent f1776932d7
commit 2f266a2143
21 files changed
+3140 -34

No files matched your search

+5 -1
View File
@@ -468,6 +468,8 @@ model AssessmentResult {
score Float?
masteryLevelValue Int?
note String?
annotationData String? // JSON: drawing annotation strokes for teacher grading
annotationImage String? // base64 PNG thumbnail of annotation
assessment Assessment @relation(fields: [assessmentId], references: [id])
student Student @relation(fields: [studentId], references: [id])
@@ -1004,7 +1006,7 @@ model CalendarEvent {
date DateTime
startTime String? // HH:mm format, null = all day
endTime String? // HH:mm format, null = all day
eventType String @default("reminder") // assessment | lesson | reminder
eventType String @default("reminder") // assessment | lesson | reminder | exam
subjectId String?
classGroupId String?
notes String?
@@ -1012,6 +1014,7 @@ model CalendarEvent {
recurrencePattern String? // JSON: { type: "daily|weekly|monthly|yearly", interval: 1, endDate?: string, daysOfWeek?: number[] }
recurrenceEnd DateTime? // When recurrence ends
parentEventId String? // For generated instances of a recurring event
assessmentId String? // Linked assessment (for exam events)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -1028,6 +1031,7 @@ model CalendarEvent {
@@index([subjectId])
@@index([classGroupId])
@@index([parentEventId])
@@index([eventType])
}
// ─── Parent-Student Link ──────────────────────────────────────────────