From 5e66bae15bc501ccfb31aa1ef3596fcf6ed35729 Mon Sep 17 00:00:00 2001 From: "[dyad]" Date: Sun, 2 Aug 2026 01:55:22 +0200 Subject: [PATCH] =?UTF-8?q?[dyad]=20SchulOS=20markalama=20kabul=20kriterle?= =?UTF-8?q?rini=20do=C4=9Frulama?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- AUDIT_SUMMARY.txt | 4 +- CODE_REVIEW_MODULE_L.md | 2 +- COMPREHENSIVE_AUDIT_REPORT.md | 2 +- CONSOLIDATION_INDEX.md | 4 +- DEEP_CONSOLIDATION_ANALYSIS.md | 4 +- FINAL_HANDOFF.md | 8 +- FINAL_STATUS.md | 2 +- FINAL_STATUS_AND_ROADMAP.md | 6 +- FIXES_AND_IMPROVEMENTS.md | 2 +- IMPLEMENTATION_COMPLETE.txt | 6 +- MEMORY_OPTIMIZATION_GUIDE.md | 2 +- PHASE_1_COMPLETE.md | 2 +- PRD_NERDEYIZ.md | 4 +- PRD_STATUS_REPORT.md | 8 +- PROFESSIONAL_CONSOLIDATION_COMPLETE.md | 2 +- PROFESSIONAL_CONSOLIDATION_SUMMARY.md | 2 +- PROJECT_STATUS.md | 4 +- README.md | 14 +-- READY_FOR_PRODUCTION.md | 6 +- REFACTOR_PLAN.md | 2 +- TODO_VISUAL.md | 2 +- docs/legal/avv-template.md | 4 +- package.json | 4 +- prisma/schema.prisma | 2 +- prisma/seed.ts | 4 +- public/logo.svg | 30 +----- public/manifest.json | 4 +- public/sw.js | 96 ++++++++++++------- src/app/admin/compliance/page.tsx | 2 +- src/app/api/announcements/[id]/read/route.ts | 2 +- src/app/api/email-templates/send/route.ts | 2 +- src/app/api/gdpr-export/route.ts | 4 +- src/app/api/notifications/[id]/route.ts | 2 +- .../api/notifications/preferences/route.ts | 2 +- src/app/api/notifications/route.ts | 2 +- src/app/api/reports/pdf/route.ts | 4 +- src/app/api/schools/route.ts | 4 +- src/app/layout.tsx | 10 +- src/components/app-layout.tsx | 6 +- src/components/dashboard-view.tsx | 2 +- src/components/onboarding-tour.tsx | 2 +- src/components/report-card-view.tsx | 2 +- src/components/school-library-view.tsx | 2 +- src/components/settings-view.tsx | 14 +-- src/components/student-detail-view.tsx | 2 +- src/lib/api.ts | 2 +- src/lib/audit.ts | 2 +- src/lib/badge-check.ts | 2 +- src/lib/cache.ts | 2 +- src/lib/i18n.ts | 50 +++++----- src/lib/notifications.ts | 2 +- src/lib/offline-cache.ts | 2 +- src/lib/qrcode.ts | 4 +- src/lib/rate-limit.ts | 2 +- src/lib/store.ts | 2 +- src/lib/websocket.ts | 2 +- worklog.md | 18 ++-- 57 files changed, 195 insertions(+), 191 deletions(-) diff --git a/AUDIT_SUMMARY.txt b/AUDIT_SUMMARY.txt index 4696a95..f9f8ac5 100644 --- a/AUDIT_SUMMARY.txt +++ b/AUDIT_SUMMARY.txt @@ -1,5 +1,5 @@ ================================================================================ - EXAMETRA CODE AUDIT SUMMARY + SCHULOS CODE AUDIT SUMMARY PRD v1 → v2 + Module L Compliance Analysis ================================================================================ @@ -357,7 +357,7 @@ AUDIT_SUMMARY.txt (this file) - Executive summary - Quick reference -MEMORY (v0_memories/user/exametra-code-review.md) +MEMORY (v0_memories/user/schulos-code-review.md) - Saved for future conversations ═══════════════════════════════════════════════════════════════════════════════ diff --git a/CODE_REVIEW_MODULE_L.md b/CODE_REVIEW_MODULE_L.md index 30049e6..a743794 100644 --- a/CODE_REVIEW_MODULE_L.md +++ b/CODE_REVIEW_MODULE_L.md @@ -1,4 +1,4 @@ -# ExaMetra Code Review & Refactor Analysis +# SchulOS Code Review & Refactor Analysis ## PRD v1 → v2 + Module L Compliance **Date:** 2026-07-31 diff --git a/COMPREHENSIVE_AUDIT_REPORT.md b/COMPREHENSIVE_AUDIT_REPORT.md index c60dab9..ddc5ff6 100644 --- a/COMPREHENSIVE_AUDIT_REPORT.md +++ b/COMPREHENSIVE_AUDIT_REPORT.md @@ -1,4 +1,4 @@ -# ExaMetra Comprehensive Audit Report +# SchulOS Comprehensive Audit Report ## Executive Summary diff --git a/CONSOLIDATION_INDEX.md b/CONSOLIDATION_INDEX.md index c85e333..5ad1a1b 100644 --- a/CONSOLIDATION_INDEX.md +++ b/CONSOLIDATION_INDEX.md @@ -1,4 +1,4 @@ -# ExaMetra Consolidation: Complete Index +# SchulOS Consolidation: Complete Index **Professional Deep Code Review & Consolidation Complete** @@ -6,7 +6,7 @@ ## OVERVIEW -This session completed a **professional, deep investigation** of ExaMetra's codebase, identifying and implementing **enterprise-grade consolidations** that eliminate duplication and add professional features. +This session completed a **professional, deep investigation** of SchulOS's codebase, identifying and implementing **enterprise-grade consolidations** that eliminate duplication and add professional features. --- diff --git a/DEEP_CONSOLIDATION_ANALYSIS.md b/DEEP_CONSOLIDATION_ANALYSIS.md index 08f040c..9838aa9 100644 --- a/DEEP_CONSOLIDATION_ANALYSIS.md +++ b/DEEP_CONSOLIDATION_ANALYSIS.md @@ -1,4 +1,4 @@ -# ExaMetra: Deep Consolidation Analysis & Implementation Plan +# SchulOS: Deep Consolidation Analysis & Implementation Plan **Analysis Date:** August 1, 2026 **Status:** Professional Consolidation Complete @@ -585,7 +585,7 @@ rm src/components/grade-analytics-view.tsx ## CONCLUSION -ExaMetra consolidation is **professional-grade**, following industry best practices. The unified calendar and grading systems provide: +SchulOS consolidation is **professional-grade**, following industry best practices. The unified calendar and grading systems provide: ✅ **84% code reduction** in affected areas ✅ **Professional UX** with drag-drop and context menus diff --git a/FINAL_HANDOFF.md b/FINAL_HANDOFF.md index 0a98063..442887d 100644 --- a/FINAL_HANDOFF.md +++ b/FINAL_HANDOFF.md @@ -1,8 +1,8 @@ -# ExaMetra Complete Refactoring & Implementation - FINAL HANDOFF +# SchulOS Complete Refactoring & Implementation - FINAL HANDOFF ## Project Status: 100% ARCHITECTURE COMPLETE -The ExaMetra platform is now architecturally complete and ready for API implementation and deployment. +The SchulOS platform is now architecturally complete and ready for API implementation and deployment. --- @@ -195,7 +195,7 @@ curl -X POST http://localhost:3000/api/v1/notifications/send \ ## File Organization Recap ``` -ExaMetra/ +SchulOS/ ├── src/ │ ├── app/ │ │ ├── admin/ @@ -344,7 +344,7 @@ Once live, measure: ## Final Notes -This project represents a complete, production-grade refactoring of ExaMetra: +This project represents a complete, production-grade refactoring of SchulOS: 1. **Code Quality:** Reduced duplication by 8% immediately, 30% with full migration 2. **Architecture:** Standardized, composable, testable patterns throughout diff --git a/FINAL_STATUS.md b/FINAL_STATUS.md index 4cc774e..fe29e08 100644 --- a/FINAL_STATUS.md +++ b/FINAL_STATUS.md @@ -1,4 +1,4 @@ -# ExaMetra: Final Status Report +# SchulOS: Final Status Report **Date:** August 1, 2026 **Time:** Consolidation & Bug Fixes Complete diff --git a/FINAL_STATUS_AND_ROADMAP.md b/FINAL_STATUS_AND_ROADMAP.md index 5b20849..5d2fd10 100644 --- a/FINAL_STATUS_AND_ROADMAP.md +++ b/FINAL_STATUS_AND_ROADMAP.md @@ -1,4 +1,4 @@ -# ExaMetra: Final Status & Production Roadmap +# SchulOS: Final Status & Production Roadmap **Status:** 100% Architecture Ready for Production **Date:** August 1, 2026 @@ -8,7 +8,7 @@ ## Executive Summary -ExaMetra has been comprehensively refactored and is ready for production deployment. All PRD requirements are implemented, infrastructure is production-grade, and 3+ weeks of consolidation work will reduce codebase from 200K to 140K lines. +SchulOS has been comprehensively refactored and is ready for production deployment. All PRD requirements are implemented, infrastructure is production-grade, and 3+ weeks of consolidation work will reduce codebase from 200K to 140K lines. --- @@ -353,7 +353,7 @@ First Contentful Paint: ~0.9s [25% improvement] ## Conclusion -ExaMetra is **production-ready** with comprehensive documentation, standardized infrastructure, and a clear path to 30% code reduction through planned consolidation. The system is secure, compliant, and performant. +SchulOS is **production-ready** with comprehensive documentation, standardized infrastructure, and a clear path to 30% code reduction through planned consolidation. The system is secure, compliant, and performant. **Deploy with confidence.** 🚀 diff --git a/FIXES_AND_IMPROVEMENTS.md b/FIXES_AND_IMPROVEMENTS.md index 7c7aad1..1c82754 100644 --- a/FIXES_AND_IMPROVEMENTS.md +++ b/FIXES_AND_IMPROVEMENTS.md @@ -1,4 +1,4 @@ -# ExaMetra: Fixes & Improvements Complete +# SchulOS: Fixes & Improvements Complete **Date:** August 1, 2026 **Status:** All Errors Fixed - Ready for Production diff --git a/IMPLEMENTATION_COMPLETE.txt b/IMPLEMENTATION_COMPLETE.txt index 7071449..87bdbb8 100644 --- a/IMPLEMENTATION_COMPLETE.txt +++ b/IMPLEMENTATION_COMPLETE.txt @@ -1,5 +1,5 @@ ================================================================================ - EXAMETRA REFACTORING - PHASE 1 COMPLETE + SCHULOS REFACTORING - PHASE 1 COMPLETE ================================================================================ PROJECT STATUS: Production-Ready Infrastructure & Module B Foundation @@ -192,7 +192,7 @@ COMPLETED: ✓ Usage examples provided ✓ Error handling implemented ✓ Uses shadcn/ui components consistently - ✓ Follows ExaMetra naming conventions + ✓ Follows SchulOS naming conventions ✓ Database migrations verified ✓ No breaking changes to existing features @@ -239,7 +239,7 @@ DOCUMENTATION PROVIDED SUMMARY ================================================================================ -Phase 1 represents a complete rewrite of ExaMetra's core infrastructure, +Phase 1 represents a complete rewrite of SchulOS's core infrastructure, transforming it from a monolithic codebase with 40% duplication into a lean, modular system built on reusable components and standardized patterns. diff --git a/MEMORY_OPTIMIZATION_GUIDE.md b/MEMORY_OPTIMIZATION_GUIDE.md index bf63707..8d78c22 100644 --- a/MEMORY_OPTIMIZATION_GUIDE.md +++ b/MEMORY_OPTIMIZATION_GUIDE.md @@ -1,4 +1,4 @@ -# ExaMetra Memory Optimization & Menu Consolidation Guide +# SchulOS Memory Optimization & Menu Consolidation Guide ## Problem Analysis diff --git a/PHASE_1_COMPLETE.md b/PHASE_1_COMPLETE.md index 155f159..c9876dd 100644 --- a/PHASE_1_COMPLETE.md +++ b/PHASE_1_COMPLETE.md @@ -196,5 +196,5 @@ All code: - ✓ Includes usage examples - ✓ Handles error cases - ✓ Uses shadcn/ui components -- ✓ Follows existing ExaMetra patterns +- ✓ Follows existing SchulOS patterns - ✓ Database migrations completed diff --git a/PRD_NERDEYIZ.md b/PRD_NERDEYIZ.md index d4c9af6..94cd8bf 100644 --- a/PRD_NERDEYIZ.md +++ b/PRD_NERDEYIZ.md @@ -1,4 +1,4 @@ -# ExaMetra PRD: Nerede Olduğumuz ve Eksiklerimiz +# SchulOS PRD: Nerede Olduğumuz ve Eksiklerimiz **Tarih:** 1 Ağustos 2026 **Durum:** 30% tamamlanmış, 70% eksik @@ -7,7 +7,7 @@ ## Özet -ExaMetra PRD'ye göre **12 modül** tanımlanmış. Bugünkü konsolidasyonda **Takvim** ve **Notlandırma** sistemini birleştirdik, ama **10 modül hala yapılacak**. +SchulOS PRD'ye göre **12 modül** tanımlanmış. Bugünkü konsolidasyonda **Takvim** ve **Notlandırma** sistemini birleştirdik, ama **10 modül hala yapılacak**. --- diff --git a/PRD_STATUS_REPORT.md b/PRD_STATUS_REPORT.md index 4c4d72c..2408942 100644 --- a/PRD_STATUS_REPORT.md +++ b/PRD_STATUS_REPORT.md @@ -1,7 +1,7 @@ -# ExaMetra PRD Status Report +# SchulOS PRD Status Report -**Date:** August 1, 2026 -**PRD Reference:** SchoolOS Consolidated PRD (12 Modules: A-L) +**Date:** August 1, 2026 +**PRD Reference:** SchulOS Consolidated PRD (12 Modules: A-L) **Current Status:** 25-30% implementation complete --- @@ -457,7 +457,7 @@ AccessLog ## Conclusion -ExaMetra is **30% complete** against the 12-module PRD. Today's consolidation work (Calendar + Grading) was critical infrastructure. To reach **100% PRD compliance in 8 weeks**, the team must: +SchulOS is **30% complete** against the 12-module PRD. Today's consolidation work (Calendar + Grading) was critical infrastructure. To reach **100% PRD compliance in 8 weeks**, the team must: 1. Complete Module A (Academics Core) — foundation for all others 2. Build Module L (GDPR compliance) in parallel — non-negotiable diff --git a/PROFESSIONAL_CONSOLIDATION_COMPLETE.md b/PROFESSIONAL_CONSOLIDATION_COMPLETE.md index 3e8e8df..c9b96c2 100644 --- a/PROFESSIONAL_CONSOLIDATION_COMPLETE.md +++ b/PROFESSIONAL_CONSOLIDATION_COMPLETE.md @@ -1,4 +1,4 @@ -# ExaMetra: Professional Consolidation Complete ✨ +# SchulOS: Professional Consolidation Complete ✨ **Status:** Production Ready with Enterprise Features **Date:** August 1, 2026 diff --git a/PROFESSIONAL_CONSOLIDATION_SUMMARY.md b/PROFESSIONAL_CONSOLIDATION_SUMMARY.md index c5c898c..50948a6 100644 --- a/PROFESSIONAL_CONSOLIDATION_SUMMARY.md +++ b/PROFESSIONAL_CONSOLIDATION_SUMMARY.md @@ -1,4 +1,4 @@ -# ExaMetra: Professional Consolidation Complete ✨ +# SchulOS: Professional Consolidation Complete ✨ **Status:** Production Ready with Enterprise Features **Date:** August 1, 2026 diff --git a/PROJECT_STATUS.md b/PROJECT_STATUS.md index 06adca5..eefa94e 100644 --- a/PROJECT_STATUS.md +++ b/PROJECT_STATUS.md @@ -1,4 +1,4 @@ -# ExaMetra Project Status Report +# SchulOS Project Status Report ## Executive Summary @@ -217,7 +217,7 @@ All endpoints follow middleware pattern and include: ## Contact & Support -- **Architect:** ExaMetra Core Team +- **Architect:** SchulOS Core Team - **Last Updated:** July 31, 2026 - **Next Review:** After Phase 2 API implementation diff --git a/README.md b/README.md index 785ba5b..c716ff9 100755 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# ExaMetra +# SchulOS **Free & open-source competence & grading platform for schools** @@ -6,9 +6,9 @@ _Kompetenzorientierte Beurteilung fur alle_ --- -## What is ExaMetra? +## What is SchulOS? -ExaMetra is a comprehensive, free, and open-source web application designed for schools to track student competencies, manage assessments, compute grades, and generate reports. Built with modern web technologies, it provides a rich, professional interface for teachers, school administrators, students, and parents. +SchulOS is a comprehensive, free, and open-source web application designed for schools to track student competencies, manage assessments, compute grades, and generate reports. Built with modern web technologies, it provides a rich, professional interface for teachers, school administrators, students, and parents. ## Features @@ -71,8 +71,8 @@ ExaMetra is a comprehensive, free, and open-source web application designed for ```bash # Clone the repository -git clone https://github.com/cetinmustafa83/exametra.git -cd exametra +git clone https://github.com/cetinmustafa83/schulos.git +cd schulos # Install dependencies npm install @@ -108,7 +108,7 @@ After seeding, you can log in with these demo accounts: ## Project Structure ``` -exametra/ +schulos/ src/ app/ # Next.js App Router pages & API routes api/ # 34+ API endpoint directories @@ -152,4 +152,4 @@ Contributions are welcome! This is a free and open-source project aimed at makin --- -**ExaMetra** — Kompetenzorientierte Beurteilung fur alle +**SchulOS** — Kompetenzorientierte Beurteilung fur alle diff --git a/READY_FOR_PRODUCTION.md b/READY_FOR_PRODUCTION.md index e2daa44..5cc3fd8 100644 --- a/READY_FOR_PRODUCTION.md +++ b/READY_FOR_PRODUCTION.md @@ -1,4 +1,4 @@ -# ExaMetra: READY FOR PRODUCTION +# SchulOS: READY FOR PRODUCTION ## Project Completion Status: 100% @@ -254,8 +254,8 @@ pnpm run build vercel deploy --prod # Or Docker/self-hosted -docker build -t exametra:latest . -docker run -e DATABASE_URL=$DB_URL exametra:latest +docker build -t schulos:latest . +docker run -e DATABASE_URL=$DB_URL schulos:latest ``` ### 4. Verify Deployment diff --git a/REFACTOR_PLAN.md b/REFACTOR_PLAN.md index 6e78228..7d7c655 100644 --- a/REFACTOR_PLAN.md +++ b/REFACTOR_PLAN.md @@ -1,4 +1,4 @@ -# ExaMetra Refactor Action Plan +# SchulOS Refactor Action Plan ## PRD v1 → v2 → Production Ready **Current State Analysis:** diff --git a/TODO_VISUAL.md b/TODO_VISUAL.md index 1c08149..90d7046 100644 --- a/TODO_VISUAL.md +++ b/TODO_VISUAL.md @@ -1,4 +1,4 @@ -# ExaMetra PRD Implementation Todo — Visual Roadmap +# SchulOS PRD Implementation Todo — Visual Roadmap ## Current Status: 30% Complete (Week 1) diff --git a/docs/legal/avv-template.md b/docs/legal/avv-template.md index ac6f1db..6c36077 100644 --- a/docs/legal/avv-template.md +++ b/docs/legal/avv-template.md @@ -32,7 +32,7 @@ The Processor shall process the following personal data on behalf of the Control - Exam monitoring logs - Communication/messaging data -**Purpose**: Operation and maintenance of the ExaMetra school management platform +**Purpose**: Operation and maintenance of the SchulOS school management platform --- @@ -202,6 +202,6 @@ The Processor is authorized to engage the following sub-processors: --- **Generated**: ISO 8601 timestamp -**Source**: ExaMetra Module L - Compliance Framework +**Source**: SchulOS Module L - Compliance Framework **REMINDER**: This is a template. Consult legal counsel to customize for your jurisdiction and service provider. diff --git a/package.json b/package.json index ec82835..600f1f0 100755 --- a/package.json +++ b/package.json @@ -1,5 +1,5 @@ { - "name": "exametra", + "name": "schulos", "version": "1.0.0", "private": false, "description": "Free & open-source competence & grading platform for schools — Kompetenzorientierte Beurteilung für alle", @@ -7,7 +7,7 @@ "author": "Mustafa Cetin", "repository": { "type": "git", - "url": "https://github.com/cetinmustafa83/exametra" + "url": "https://github.com/cetinmustafa83/schulos" }, "keywords": [ "education", diff --git a/prisma/schema.prisma b/prisma/schema.prisma index d729cad..85172fb 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -1,4 +1,4 @@ -// CompetenceTrack — Full Database Schema +// SchulOS — Full Database Schema // SQLite via Prisma ORM | UUIDs for portability | UTC timestamps generator client { diff --git a/prisma/seed.ts b/prisma/seed.ts index 8578f2f..53cf794 100755 --- a/prisma/seed.ts +++ b/prisma/seed.ts @@ -1,5 +1,5 @@ /** - * CompetenceTrack — Prisma Seed Script + * SchulOS — Prisma Seed Script * Populates the database with realistic demo data for a Berlin elementary school. * * Usage: bun prisma/seed.ts @@ -29,7 +29,7 @@ function pick(arr: T[]): T { } async function main() { - console.log('🌱 Seeding CompetenceTrack database...\n') + console.log('🌱 Seeding SchulOS database...\n') // Clean up existing data (order matters due to foreign keys) console.log(' 🧹 Cleaning existing data...') diff --git a/public/logo.svg b/public/logo.svg index d93ac8f..01da776 100755 --- a/public/logo.svg +++ b/public/logo.svg @@ -1,29 +1 @@ - - - - - - - - - - - - - - - +SchulOS \ No newline at end of file diff --git a/public/manifest.json b/public/manifest.json index 4f5156f..45b8c4d 100755 --- a/public/manifest.json +++ b/public/manifest.json @@ -1,6 +1,6 @@ { - "name": "CompetenceTrack", - "short_name": "CompTrack", + "name": "SchulOS", + "short_name": "SchulOS", "description": "Kompetenz- und Benotungsplattform für Schulen", "start_url": "/", "display": "standalone", diff --git a/public/sw.js b/public/sw.js index 3c2b889..a85f4db 100755 --- a/public/sw.js +++ b/public/sw.js @@ -1,8 +1,12 @@ -// CompetenceTrack — Service Worker for PWA Offline Support -const CACHE_NAME = 'competencetrack-v3'; -const STATIC_CACHE = 'competencetrack-static-v3'; -const DATA_CACHE = 'competencetrack-data-v3'; -const OFFLINE_CACHE = 'competencetrack-offline-v3'; +// SchulOS — Service Worker for PWA Offline Support +const CACHE_NAME = 'schulos-v3'; +const STATIC_CACHE = 'schulos-static-v3'; +const DATA_CACHE = 'schulos-data-v3'; +const OFFLINE_CACHE = 'schulos-offline-v3'; +const SYNC_TAG = 'schulos-sync'; +const LEGACY_SYNC_TAG = 'competencetrack-sync'; +const SYNC_DB = 'schulos-sync-db'; +const LEGACY_SYNC_DB = 'competencetrack-sync-db'; // Static assets to cache on install const STATIC_ASSETS = [ @@ -33,19 +37,17 @@ self.addEventListener('install', (event) => { ); }); -// Activate event — clean up old caches +// Activate event — migrate queued writes before clearing legacy caches. self.addEventListener('activate', (event) => { event.waitUntil( - caches.keys().then((keys) => { - return Promise.all( + migrateLegacyPendingRequests() + .then(() => caches.keys()) + .then((keys) => Promise.all( keys .filter((key) => key !== CACHE_NAME && key !== STATIC_CACHE && key !== DATA_CACHE && key !== OFFLINE_CACHE) .map((key) => caches.delete(key)) - ); - }).then(() => { - console.log('[SW] Activated and old caches cleaned'); - return self.clients.claim(); - }) + )) + .then(() => self.clients.claim()) ); }); @@ -191,7 +193,7 @@ async function networkFirstWithOfflineFallback(request) { // Store failed requests for background sync async function storeRequestForSync(request) { - const db = await openIndexedDB(); + const db = await openIndexedDB(SYNC_DB); const tx = db.transaction('pending-requests', 'readwrite'); const store = tx.objectStore('pending-requests'); const requestData = { @@ -202,16 +204,13 @@ async function storeRequestForSync(request) { timestamp: Date.now(), }; store.add(requestData); - await tx.done; - - // Register for background sync - self.registration.sync.register('competencetrack-sync'); + await transactionDone(tx); + self.registration.sync.register(SYNC_TAG); } -// Open IndexedDB for storing pending requests -function openIndexedDB() { +function openIndexedDB(name) { return new Promise((resolve, reject) => { - const request = indexedDB.open('competencetrack-sync-db', 1); + const request = indexedDB.open(name, 1); request.onupgradeneeded = () => { const db = request.result; if (!db.objectStoreNames.contains('pending-requests')) { @@ -223,18 +222,54 @@ function openIndexedDB() { }); } -// Background sync event — replay queued requests when back online +function transactionDone(tx) { + return new Promise((resolve, reject) => { + tx.oncomplete = () => resolve(); + tx.onerror = () => reject(tx.error); + tx.onabort = () => reject(tx.error); + }); +} + +async function migrateLegacyPendingRequests() { + const legacyDb = await openIndexedDB(LEGACY_SYNC_DB); + const legacyTx = legacyDb.transaction('pending-requests', 'readonly'); + const legacyStore = legacyTx.objectStore('pending-requests'); + const requests = await new Promise((resolve, reject) => { + const request = legacyStore.getAll(); + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); + await transactionDone(legacyTx); + + if (!requests.length) return; + + const currentDb = await openIndexedDB(SYNC_DB); + const currentTx = currentDb.transaction('pending-requests', 'readwrite'); + const currentStore = currentTx.objectStore('pending-requests'); + for (const request of requests) currentStore.put(request); + await transactionDone(currentTx); + + const deleteTx = legacyDb.transaction('pending-requests', 'readwrite'); + deleteTx.objectStore('pending-requests').clear(); + await transactionDone(deleteTx); +} + +// Background sync event — replay queues from both brand generations. self.addEventListener('sync', (event) => { - if (event.tag === 'competencetrack-sync') { - event.waitUntil(replayPendingRequests()); + if (event.tag === SYNC_TAG || event.tag === LEGACY_SYNC_TAG) { + event.waitUntil(migrateLegacyPendingRequests().then(replayPendingRequests)); } }); async function replayPendingRequests() { - const db = await openIndexedDB(); + const db = await openIndexedDB(SYNC_DB); const tx = db.transaction('pending-requests', 'readwrite'); const store = tx.objectStore('pending-requests'); - const allRequests = await store.getAll(); + const allRequests = await new Promise((resolve, reject) => { + const request = store.getAll(); + request.onsuccess = () => resolve(request.result); + request.onerror = () => reject(request.error); + }); for (const reqData of allRequests) { try { @@ -244,15 +279,12 @@ async function replayPendingRequests() { headers, body: reqData.method !== 'GET' ? reqData.body : undefined, }); - if (response.ok) { - store.delete(reqData.timestamp); - } + if (response.ok) store.delete(reqData.timestamp); } catch (error) { console.warn('[SW] Failed to replay request:', error); - // Keep the request in the store for next sync attempt } } - await tx.done; + await transactionDone(tx); } // Push event — show notification (if push notifications are configured) @@ -269,7 +301,7 @@ self.addEventListener('push', (event) => { }, }; event.waitUntil( - self.registration.showNotification(data.title || 'CompetenceTrack', options) + self.registration.showNotification(data.title || 'SchulOS', options) ); }); diff --git a/src/app/admin/compliance/page.tsx b/src/app/admin/compliance/page.tsx index dd57325..58b629c 100644 --- a/src/app/admin/compliance/page.tsx +++ b/src/app/admin/compliance/page.tsx @@ -59,7 +59,7 @@ export default function CompliancePage() {

- ✓ Compliance onboarding completed successfully! Your school is now ready to use ExaMetra. + ✓ Compliance onboarding completed successfully! Your school is now ready to use SchulOS.

@@ -364,7 +364,7 @@ function generatePrintHtml(report: Record, template: string): s ${gradesHtml} )}
-

{schoolBranding?.name || 'CompetenceTrack'}

+

{schoolBranding?.name || 'SchulOS'}

{t('app.subtitle')}

@@ -1409,7 +1409,7 @@ export default function AppLayout() {
- CompetenceTrack — {t('footer.copyright')} + SchulOS — {t('footer.copyright')} {t('footer.version')} · {t('footer.oss')} @@ -1609,7 +1609,7 @@ export default function AppLayout() { {t('polish.help')} - CompetenceTrack · {t('footer.version')} + SchulOS · {t('footer.version')}
diff --git a/src/components/dashboard-view.tsx b/src/components/dashboard-view.tsx index 3885026..0c98e98 100755 --- a/src/components/dashboard-view.tsx +++ b/src/components/dashboard-view.tsx @@ -3295,7 +3295,7 @@ export default function DashboardView() {
- {currentUser?.schoolId ? t('nav.classes') : 'CompetenceTrack'} + {currentUser?.schoolId ? t('nav.classes') : 'SchulOS'} {t('dashboard.total_students')}: {data.stats.totalStudents} · {t('dashboard.total_classes')}: {data.stats.totalClasses} diff --git a/src/components/onboarding-tour.tsx b/src/components/onboarding-tour.tsx index 5d1d8eb..b4c619d 100755 --- a/src/components/onboarding-tour.tsx +++ b/src/components/onboarding-tour.tsx @@ -244,7 +244,7 @@ export default function OnboardingTour({ open, onClose }: OnboardingTourProps) { {/* Hidden title for accessibility */} - CompetenceTrack Onboarding Tour + SchulOS Onboarding Tour {/* Close button */} diff --git a/src/components/report-card-view.tsx b/src/components/report-card-view.tsx index 72db4d2..04056a3 100755 --- a/src/components/report-card-view.tsx +++ b/src/components/report-card-view.tsx @@ -1762,7 +1762,7 @@ function generatePrintHTML( return `
-

${school?.name ?? 'CompetenceTrack'}

+

${school?.name ?? 'SchulOS'}

${school?.motto ? `

${school.motto}

` : ''}

Zeugnis / Report Card

Schuljahr: ${report.schoolYear.label}

diff --git a/src/components/school-library-view.tsx b/src/components/school-library-view.tsx index 451346f..eceed4a 100755 --- a/src/components/school-library-view.tsx +++ b/src/components/school-library-view.tsx @@ -534,7 +534,7 @@ export default function SchoolLibraryView() {

${t('library.due_date')}: ${new Date(checkout.dueDate).toLocaleDateString()}

${t('library.condition')}: ${checkout.condition}


-

CompetenceTrack - ${t('library.title')}

+

SchulOS - ${t('library.title')}

`); printWindow.document.close(); diff --git a/src/components/settings-view.tsx b/src/components/settings-view.tsx index 3ac5ebd..8117c82 100755 --- a/src/components/settings-view.tsx +++ b/src/components/settings-view.tsx @@ -732,7 +732,7 @@ function PrivacyTab({ currentUser }: { currentUser: { id: string; role: string; const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; - a.download = `competencetrack-data-export-${new Date().toISOString().split('T')[0]}.json`; + a.download = `schulos-data-export-${new Date().toISOString().split('T')[0]}.json`; document.body.appendChild(a); a.click(); document.body.removeChild(a); @@ -866,7 +866,7 @@ function PrivacyTab({ currentUser }: { currentUser: { id: string; role: string;

{t('dsgvo.contact_dpo')}

-

datenschutz@competencetrack.org

+

datenschutz@schulos.org

@@ -1070,12 +1070,12 @@ function PrivacyTab({ currentUser }: { currentUser: { id: string; role: string; className="min-h-[44px] rounded-xl border-violet-200 dark:border-violet-900/30 text-violet-700 dark:text-violet-300 hover:bg-violet-50 dark:hover:bg-violet-900/20 font-semibold" onClick={() => { // Generate a simple DPA template as a downloadable text file - const dpaTemplate = `Auftragsverarbeitungsvertrag (AVV)\ngemäß Art. 28 DSGVO\n\nVerantwortliche Stelle (Schule):\n[Name der Schule]\n[Adresse]\n\nAuftragsverarbeiter:\nCompetenceTrack\n[Adresse]\n\n1. Gegenstand und Dauer der Verarbeitung\nDer Auftragsverarbeiter verarbeitet personenbezogene Daten im Auftrag der verantwortlichen Stelle gemäß den Bestimmungen dieses Vertrages.\n\n2. Art und Zweck der Verarbeitung\n- Bereitstellung und Betrieb der CompetenceTrack-Plattform\n- Verwaltung von Schüler- und Klassendaten\n- Dokumentation von Lernfortschritten\n- Erstellung von Zeugnissen und Berichten\n\n3. Art der personenbezogenen Daten\n- Name, E-Mail-Adresse\n- Schülereinschreibungsdaten\n- Lernfortschrittsdaten\n- Bewertungsdaten\n- Anwesenheitsdaten\n\n4. Betroffene Personenkreise\n- Schülerinnen und Schüler\n- Lehrkräfte\n- Eltern / Erziehungsberechtigte\n\n5. Technisch-organisatorische Maßnahmen\nDer Auftragsverarbeiter implementiert angemessene technisch-organisatorische Maßnahmen gemäß Art. 32 DSGVO.\n\n6. Löschung und Rückgabe von Daten\nNach Beendigung des Auftragsverhältnisses werden alle personenbezogenen Daten gelöscht.\n\n7. Kontrolle durch die verantwortliche Stelle\nDie verantwortliche Stelle hat das Recht, die Einhaltung der Maßnahmen zu kontrollieren.\n\n8. Unterauftragsverhältnisse\nEine Weitergabe an Unterauftragnehmer bedarf der vorherigen Zustimmung der verantwortlichen Stelle.\n\nOrt, Datum: _______________\n\nUnterschrift Verantwortliche Stelle: _______________\nUnterschrift Auftragsverarbeiter: _______________`; + const dpaTemplate = `Auftragsverarbeitungsvertrag (AVV)\ngemäß Art. 28 DSGVO\n\nVerantwortliche Stelle (Schule):\n[Name der Schule]\n[Adresse]\n\nAuftragsverarbeiter:\nSchulOS\n[Adresse]\n\n1. Gegenstand und Dauer der Verarbeitung\nDer Auftragsverarbeiter verarbeitet personenbezogene Daten im Auftrag der verantwortlichen Stelle gemäß den Bestimmungen dieses Vertrages.\n\n2. Art und Zweck der Verarbeitung\n- Bereitstellung und Betrieb der SchulOS-Plattform\n- Verwaltung von Schüler- und Klassendaten\n- Dokumentation von Lernfortschritten\n- Erstellung von Zeugnissen und Berichten\n\n3. Art der personenbezogenen Daten\n- Name, E-Mail-Adresse\n- Schülereinschreibungsdaten\n- Lernfortschrittsdaten\n- Bewertungsdaten\n- Anwesenheitsdaten\n\n4. Betroffene Personenkreise\n- Schülerinnen und Schüler\n- Lehrkräfte\n- Eltern / Erziehungsberechtigte\n\n5. Technisch-organisatorische Maßnahmen\nDer Auftragsverarbeiter implementiert angemessene technisch-organisatorische Maßnahmen gemäß Art. 32 DSGVO.\n\n6. Löschung und Rückgabe von Daten\nNach Beendigung des Auftragsverhältnisses werden alle personenbezogenen Daten gelöscht.\n\n7. Kontrolle durch die verantwortliche Stelle\nDie verantwortliche Stelle hat das Recht, die Einhaltung der Maßnahmen zu kontrollieren.\n\n8. Unterauftragsverhältnisse\nEine Weitergabe an Unterauftragnehmer bedarf der vorherigen Zustimmung der verantwortlichen Stelle.\n\nOrt, Datum: _______________\n\nUnterschrift Verantwortliche Stelle: _______________\nUnterschrift Auftragsverarbeiter: _______________`; const blob = new Blob([dpaTemplate], { type: 'text/plain;charset=utf-8' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; - a.download = 'AVV_CompetenceTrack_Vorlage.txt'; + a.download = 'AVV_SchulOS_Vorlage.txt'; document.body.appendChild(a); a.click(); document.body.removeChild(a); @@ -1102,7 +1102,7 @@ function PrivacyTab({ currentUser }: { currentUser: { id: string; role: string; title: 'Verzeichnis von Verarbeitungstätigkeiten', legalBasis: 'Art. 30 DSGVO', controller: '[Name der Schule]', - processor: 'CompetenceTrack', + processor: 'SchulOS', processingActivities: [ { name: 'Benutzerverwaltung', purpose: 'Bereitstellung der Plattform', dataCategories: 'Name, E-Mail, Rolle', retention: 'Dauer der Nutzung + 30 Tage', legalBasis: 'Art. 6 Abs. 1 lit. b DSGVO' }, { name: 'Schülerverwaltung', purpose: 'Verwaltung von Klassen und Schülern', dataCategories: 'Name, Geburtsdatum, Geschlecht', retention: 'Dauer der Nutzung + 30 Tage', legalBasis: 'Art. 6 Abs. 1 lit. b DSGVO' }, @@ -5085,7 +5085,7 @@ export default function SettingsView() {
)}
-

{selectedSchool?.name || 'CompetenceTrack'}

+

{selectedSchool?.name || 'SchulOS'}

{brandingForm.motto || t('app.subtitle')}

@@ -5444,7 +5444,7 @@ export default function SettingsView() {

{t('email.template_subject')}: {emailPreviewTemplate.subject}

- {emailPreviewTemplate.body.replace(/\{\{studentName\}\}/g, 'Max Mustermann').replace(/\{\{className\}\}/g, 'Klasse 5a').replace(/\{\{teacherName\}\}/g, 'Frau Muster').replace(/\{\{date\}\}/g, new Date().toLocaleDateString()).replace(/\{\{schoolName\}\}/g, 'CompetenceTrack Schule').replace(/\{\{subjectName\}\}/g, 'Mathematik').replace(/\{\{score\}\}/g, '85%')} + {emailPreviewTemplate.body.replace(/\{\{studentName\}\}/g, 'Max Mustermann').replace(/\{\{className\}\}/g, 'Klasse 5a').replace(/\{\{teacherName\}\}/g, 'Frau Muster').replace(/\{\{date\}\}/g, new Date().toLocaleDateString()).replace(/\{\{schoolName\}\}/g, 'SchulOS Schule').replace(/\{\{subjectName\}\}/g, 'Mathematik').replace(/\{\{score\}\}/g, '85%')}
diff --git a/src/components/student-detail-view.tsx b/src/components/student-detail-view.tsx index eddacc9..9428439 100755 --- a/src/components/student-detail-view.tsx +++ b/src/components/student-detail-view.tsx @@ -378,7 +378,7 @@ function exportStudentCsv(data: StudentDetailData) { const rows: string[] = []; // Header section - rows.push('CompetenceTrack - Student Export'); + rows.push('SchulOS - Student Export'); rows.push(`Student,${studentName}`); rows.push(`Class,${primaryClass}`); rows.push(`School,${schoolName}`); diff --git a/src/lib/api.ts b/src/lib/api.ts index 6dc3377..f7369ee 100755 --- a/src/lib/api.ts +++ b/src/lib/api.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — API Client +// SchulOS — API Client // All API calls go through these helpers /* ── Generic helpers ──────────────────────────────────────────────── */ diff --git a/src/lib/audit.ts b/src/lib/audit.ts index 22e10fb..c81c72b 100644 --- a/src/lib/audit.ts +++ b/src/lib/audit.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — Audit Logging Middleware +// SchulOS — Audit Logging Middleware // Provides logAudit() and withAuditLog() helpers for recording all data modifications import { db } from '@/lib/db'; diff --git a/src/lib/badge-check.ts b/src/lib/badge-check.ts index 1c5d494..14f2e14 100755 --- a/src/lib/badge-check.ts +++ b/src/lib/badge-check.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — Badge Auto-Award Check Utility +// SchulOS — Badge Auto-Award Check Utility // Checks if a student meets requirements for auto-awarded badges import { db } from '@/lib/db'; diff --git a/src/lib/cache.ts b/src/lib/cache.ts index 6f9a38d..089977b 100755 --- a/src/lib/cache.ts +++ b/src/lib/cache.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — In-memory API response cache utility +// SchulOS — In-memory API response cache utility // Provides TTL-based caching for API responses to reduce redundant fetches interface CacheEntry { diff --git a/src/lib/i18n.ts b/src/lib/i18n.ts index fc86b95..b76fa99 100755 --- a/src/lib/i18n.ts +++ b/src/lib/i18n.ts @@ -1,11 +1,11 @@ -// CompetenceTrack — i18n (German + English) +// SchulOS — i18n (German + English) // Simple translation system: t(key) returns the string for the current locale type TranslationDict = Record; const de: TranslationDict = { // App branding - 'app.name': 'CompetenceTrack', + 'app.name': 'SchulOS', 'app.subtitle': 'Freie Kompetenz- & Benotungsplattform für Schulen', 'app.tagline': 'Open-Source Software für kompetenzorientierte Beurteilung', @@ -56,7 +56,7 @@ const de: TranslationDict = { 'auth.password': 'Passwort', 'auth.firstName': 'Vorname', 'auth.lastName': 'Nachname', - 'auth.login_title': 'Bei CompetenceTrack anmelden', + 'auth.login_title': 'Bei SchulOS anmelden', 'auth.register_title': 'Neues Konto erstellen', 'auth.login_subtitle': 'Geben Sie Ihre Zugangsdaten ein', 'auth.register_subtitle': 'Erstellen Sie ein kostenloses Konto', @@ -440,7 +440,7 @@ const de: TranslationDict = { // Onboarding checklist 'onboarding.title': 'Erste Schritte', - 'onboarding.subtitle': 'Follow these steps to set up CompetenceTrack', + 'onboarding.subtitle': 'Follow these steps to set up SchulOS', 'onboarding.step_create_class': 'Erstellen Sie Ihre erste Klasse', 'onboarding.step_assign_grid': 'Weisen Sie ein Kompetenzraster zu', 'onboarding.step_add_students': 'Fügen Sie Schüler hinzu', @@ -478,7 +478,7 @@ const de: TranslationDict = { 'classes.assign_no_templates': 'Keine passenden Raster gefunden.', // Footer - 'footer.copyright': 'CompetenceTrack — Freie Schulsoftware', + 'footer.copyright': 'SchulOS — Freie Schulsoftware', 'footer.version': 'Version 1.0', 'footer.oss': 'Open Source', 'sidebar.eco_message': 'Papier sparen, Umwelt schutzen', @@ -1732,7 +1732,7 @@ const de: TranslationDict = { 'notifications.days_ago': 'vor {days} Tagen', // Onboarding - 'onboarding.welcome_title': 'Willkommen bei CompetenceTrack!', + 'onboarding.welcome_title': 'Willkommen bei SchulOS!', 'onboarding.welcome_desc': 'Ihre freie Kompetenz- & Benotungsplattform für Schulen. Lassen Sie uns eine kurze Einführung machen.', 'onboarding.dashboard_title': 'Dashboard', 'onboarding.dashboard_desc': 'Hier sehen Sie einen Überblick über alle Klassen, Schüler und aktuelle Aktivitäten. Nutzen Sie die Schnellaktionen für häufige Aufgaben.', @@ -1743,7 +1743,7 @@ const de: TranslationDict = { 'onboarding.reports_title': 'Berichte', 'onboarding.reports_desc': 'Erstellen Sie Zeugnis- und Entwicklungsberichte. Exportieren Sie diese als PDF oder drucken Sie sie direkt.', 'onboarding.done_title': 'Fertig!', - 'onboarding.done_desc': 'Sie sind bereit, CompetenceTrack zu nutzen. Bei Fragen klicken Sie auf das Hilfe-Symbol in der Kopfzeile.', + 'onboarding.done_desc': 'Sie sind bereit, SchulOS zu nutzen. Bei Fragen klicken Sie auf das Hilfe-Symbol in der Kopfzeile.', 'onboarding.skip': 'Überspringen', 'onboarding.next': 'Weiter', 'onboarding.back': 'Zurück', @@ -1764,7 +1764,7 @@ const de: TranslationDict = { 'onboarding.parents_title': 'Elternkommunikation', 'onboarding.parents_desc': 'Kommunizieren Sie mit Eltern über den Lernfortschritt. Senden Sie Berichte und halten Sie den Dialog aufrecht.', 'onboarding.environmental_title': 'Umweltschutz', - 'onboarding.environmental_desc': 'CompetenceTrack spart Papier: Jeder digitale Eintrag ersetzt ca. 50 Seiten Papier. Danke für Ihren Beitrag zum Umweltschutz!', + 'onboarding.environmental_desc': 'SchulOS spart Papier: Jeder digitale Eintrag ersetzt ca. 50 Seiten Papier. Danke für Ihren Beitrag zum Umweltschutz!', // Batch deletion (progress entries) 'progress.batch_select': 'Auswählen', @@ -2728,10 +2728,10 @@ const de: TranslationDict = { 'pwa.back_online_desc': 'Ihre Verbindung wurde wiederhergestellt.', 'pwa.cached_data': 'Cache-Daten', 'pwa.install_app': 'App installieren', - 'pwa.install_app_desc': 'CompetenceTrack als App auf Ihrem Gerät installieren.', + 'pwa.install_app_desc': 'SchulOS als App auf Ihrem Gerät installieren.', 'pwa.install': 'Installieren', 'pwa.installed': 'App installiert', - 'pwa.installed_desc': 'CompetenceTrack wurde erfolgreich als App installiert.', + 'pwa.installed_desc': 'SchulOS wurde erfolgreich als App installiert.', 'pwa.install_accepted': 'Installation gestartet', 'pwa.update_available': 'Update verfügbar', 'pwa.update_available_desc': 'Eine neue Version ist verfügbar. Laden Sie die Seite neu.', @@ -3300,7 +3300,7 @@ const de: TranslationDict = { 'events.view_all': 'Alle Veranstaltungen', // Onboarding Tour (24 steps) - DE - 'onboarding.step_1_title': 'Willkommen bei CompetenceTrack!', + 'onboarding.step_1_title': 'Willkommen bei SchulOS!', 'onboarding.step_1_desc': 'Ihre freie Kompetenz- & Benotungsplattform für Schulen. Lassen Sie uns eine kurze Einführung machen.', 'onboarding.step_2_title': 'Dashboard', 'onboarding.step_2_desc': 'Hier sehen Sie einen Überblick über alle Klassen, Schüler und aktuelle Aktivitäten. Nutzen Sie die Schnellaktionen und Kennzahlen.', @@ -3349,7 +3349,7 @@ const de: TranslationDict = { 'onboarding.step_24_title': 'Einstellungen', 'onboarding.step_24_desc': 'Passen Sie die Plattform an: Schulprofil, Branding, Backup und Datenverwaltung.', 'onboarding.celebration': 'Sie sind bereit!', - 'onboarding.complete': 'Sie haben die Tour abgeschlossen. Viel Erfolg mit CompetenceTrack!', + 'onboarding.complete': 'Sie haben die Tour abgeschlossen. Viel Erfolg mit SchulOS!', 'onboarding.previous': 'Zurück', 'onboarding.dont_show_again': 'Nicht mehr anzeigen', 'onboarding.restart_tour': 'Tour erneut starten', @@ -3676,7 +3676,7 @@ const de: TranslationDict = { 'dsgvo.dpa_desc': 'Vertrag zur Auftragsdatenverarbeitung gemäß Art. 28 DSGVO', 'dsgvo.data_register': 'Verzeichnis von Verarbeitungstätigkeiten', 'dsgvo.data_register_desc': 'Übersicht aller Verarbeitungstätigkeiten gemäß Art. 30 DSGVO', - 'dsgvo.privacy_policy_text': 'Die nachfolgende Datenschutzerklärung gilt für die Nutzung der Plattform CompetenceTrack. Verantwortlich für die Datenverarbeitung ist die jeweilige Schule.', + 'dsgvo.privacy_policy_text': 'Die nachfolgende Datenschutzerklärung gilt für die Nutzung der Plattform SchulOS. Verantwortlich für die Datenverarbeitung ist die jeweilige Schule.', 'dsgvo.data_collected_list': 'Name, E-Mail-Adresse, Passwort (verschlüsselt), Rollenzuordnung, Klassen- und Fächerverknüpfungen, Lernfortschritte, Bewertungen, Anwesenheitsdaten, Notizen und Zeugnisse.', 'dsgvo.data_purpose_list': 'Bereitstellung und Betrieb der Plattform, Verwaltung von Schülern und Klassen, Dokumentation von Lernfortschritten, Erstellung von Zeugnissen und Berichten, Kommunikation mit Eltern.', 'dsgvo.data_retention_list': 'Nutzerdaten werden für die Dauer der Nutzung gespeichert. Nach Löschung des Kontos werden die Daten nach Ablauf der 30-tägigen Widerspruchsfrist unwiderruflich gelöscht. Auswertungsdaten werden nach 3 Jahren anonymisiert.', @@ -6654,7 +6654,7 @@ const de: TranslationDict = { const en: TranslationDict = { // App branding - 'app.name': 'CompetenceTrack', + 'app.name': 'SchulOS', 'app.subtitle': 'Free Competency & Grading Platform for Schools', 'app.tagline': 'Open-Source Software for Competency-Based Assessment', @@ -6705,7 +6705,7 @@ const en: TranslationDict = { 'auth.password': 'Password', 'auth.firstName': 'First Name', 'auth.lastName': 'Last Name', - 'auth.login_title': 'Sign in to CompetenceTrack', + 'auth.login_title': 'Sign in to SchulOS', 'auth.register_title': 'Create a new account', 'auth.login_subtitle': 'Enter your credentials', 'auth.register_subtitle': 'Create a free account', @@ -7089,7 +7089,7 @@ const en: TranslationDict = { // Onboarding checklist 'onboarding.title': 'Getting Started', - 'onboarding.subtitle': 'Follow these steps to set up CompetenceTrack', + 'onboarding.subtitle': 'Follow these steps to set up SchulOS', 'onboarding.step_create_class': 'Create your first class', 'onboarding.step_assign_grid': 'Assign a competency grid', 'onboarding.step_add_students': 'Add students', @@ -7127,7 +7127,7 @@ const en: TranslationDict = { 'classes.assign_no_templates': 'No matching templates found.', // Footer - 'footer.copyright': 'CompetenceTrack — Free School Software', + 'footer.copyright': 'SchulOS — Free School Software', 'footer.version': 'Version 1.0', 'footer.oss': 'Open Source', 'sidebar.eco_message': 'Save paper, protect the environment', @@ -8381,7 +8381,7 @@ const en: TranslationDict = { 'notifications.days_ago': '{days} days ago', // Onboarding - 'onboarding.welcome_title': 'Welcome to CompetenceTrack!', + 'onboarding.welcome_title': 'Welcome to SchulOS!', 'onboarding.welcome_desc': 'Your free competency & grading platform for schools. Let\'s take a quick tour.', 'onboarding.dashboard_title': 'Dashboard', 'onboarding.dashboard_desc': 'Here you see an overview of all classes, students and current activities. Use quick actions for common tasks.', @@ -8392,7 +8392,7 @@ const en: TranslationDict = { 'onboarding.reports_title': 'Reports', 'onboarding.reports_desc': 'Create report cards and development reports. Export as PDF or print directly.', 'onboarding.done_title': 'Done!', - 'onboarding.done_desc': 'You\'re ready to use CompetenceTrack. For questions, click the help icon in the header.', + 'onboarding.done_desc': 'You\'re ready to use SchulOS. For questions, click the help icon in the header.', 'onboarding.skip': 'Skip', 'onboarding.next': 'Next', 'onboarding.back': 'Back', @@ -8413,7 +8413,7 @@ const en: TranslationDict = { 'onboarding.parents_title': 'Parent Communication', 'onboarding.parents_desc': 'Communicate with parents about learning progress. Send reports and maintain an ongoing dialogue.', 'onboarding.environmental_title': 'Environmental Protection', - 'onboarding.environmental_desc': 'CompetenceTrack saves paper: Each digital entry replaces ~50 pages of paper. Thank you for contributing to environmental protection!', + 'onboarding.environmental_desc': 'SchulOS saves paper: Each digital entry replaces ~50 pages of paper. Thank you for contributing to environmental protection!', // Batch deletion (progress entries) 'progress.batch_select': 'Select', @@ -9376,10 +9376,10 @@ const en: TranslationDict = { 'pwa.back_online_desc': 'Your connection has been restored.', 'pwa.cached_data': 'Cached data', 'pwa.install_app': 'Install App', - 'pwa.install_app_desc': 'Install CompetenceTrack as an app on your device.', + 'pwa.install_app_desc': 'Install SchulOS as an app on your device.', 'pwa.install': 'Install', 'pwa.installed': 'App installed', - 'pwa.installed_desc': 'CompetenceTrack has been successfully installed as an app.', + 'pwa.installed_desc': 'SchulOS has been successfully installed as an app.', 'pwa.install_accepted': 'Installation started', 'pwa.update_available': 'Update available', 'pwa.update_available_desc': 'A new version is available. Reload the page to update.', @@ -9948,7 +9948,7 @@ const en: TranslationDict = { 'events.view_all': 'View All Events', // Onboarding Tour (24 steps) - EN - 'onboarding.step_1_title': 'Welcome to CompetenceTrack!', + 'onboarding.step_1_title': 'Welcome to SchulOS!', 'onboarding.step_1_desc': 'Your free competency & grading platform for schools. Let\'s take a quick tour.', 'onboarding.step_2_title': 'Dashboard', 'onboarding.step_2_desc': 'Here you see an overview of all classes, students and current activities. Use quick actions and key metrics.', @@ -9997,7 +9997,7 @@ const en: TranslationDict = { 'onboarding.step_24_title': 'Settings', 'onboarding.step_24_desc': 'Customize the platform: school profile, branding, backup and data management.', 'onboarding.celebration': 'You\'re all set!', - 'onboarding.complete': 'You\'ve completed the tour. Good luck with CompetenceTrack!', + 'onboarding.complete': 'You\'ve completed the tour. Good luck with SchulOS!', 'onboarding.previous': 'Previous', 'onboarding.dont_show_again': 'Don\'t show again', 'onboarding.restart_tour': 'Restart tour', @@ -10324,7 +10324,7 @@ const en: TranslationDict = { 'dsgvo.dpa_desc': 'Data processing agreement pursuant to Art. 28 GDPR', 'dsgvo.data_register': 'Register of Processing Activities', 'dsgvo.data_register_desc': 'Overview of all processing activities pursuant to Art. 30 GDPR', - 'dsgvo.privacy_policy_text': 'The following privacy policy applies to the use of the CompetenceTrack platform. The respective school is responsible for data processing.', + 'dsgvo.privacy_policy_text': 'The following privacy policy applies to the use of the SchulOS platform. The respective school is responsible for data processing.', 'dsgvo.data_collected_list': 'Name, email address, password (encrypted), role assignment, class and subject associations, learning progress, assessments, attendance data, notes and reports.', 'dsgvo.data_purpose_list': 'Provision and operation of the platform, management of students and classes, documentation of learning progress, creation of reports, communication with parents.', 'dsgvo.data_retention_list': 'User data is stored for the duration of use. After account deletion, data is permanently deleted after the 30-day objection period. Analytics data is anonymized after 3 years.', diff --git a/src/lib/notifications.ts b/src/lib/notifications.ts index 1c9a52a..0c0ddf8 100755 --- a/src/lib/notifications.ts +++ b/src/lib/notifications.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — Notification Helper +// SchulOS — Notification Helper // Server-side utility for creating notifications in the database // Also pushes notifications via WebSocket service diff --git a/src/lib/offline-cache.ts b/src/lib/offline-cache.ts index 71bc629..cb9739d 100755 --- a/src/lib/offline-cache.ts +++ b/src/lib/offline-cache.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — Offline Cache for Notebook Data +// SchulOS — Offline Cache for Notebook Data // Stores notebook data in localStorage for offline access const NOTEBOOK_CACHE_KEY = 'ct_notebook_cache'; diff --git a/src/lib/qrcode.ts b/src/lib/qrcode.ts index 5ed8d10..2dd1931 100755 --- a/src/lib/qrcode.ts +++ b/src/lib/qrcode.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — QR Code Generation Utility +// SchulOS — QR Code Generation Utility // Generates QR codes as base64 PNG images using canvas export type QRCodeType = 'student' | 'class' | 'attendance' | 'event'; @@ -17,7 +17,7 @@ export interface QRCodeData { * Build a URL string from QR code data that can be encoded into a QR code */ export function buildQRCodeUrl(data: QRCodeData): string { - const base = typeof window !== 'undefined' ? window.location.origin : 'https://competencetrack.app'; + const base = typeof window !== 'undefined' ? window.location.origin : 'https://schulos.app'; switch (data.type) { case 'student': return `${base}/?student=${data.id}`; diff --git a/src/lib/rate-limit.ts b/src/lib/rate-limit.ts index fb9e174..7958ae8 100755 --- a/src/lib/rate-limit.ts +++ b/src/lib/rate-limit.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — API Rate Limiting Middleware +// SchulOS — API Rate Limiting Middleware // In-memory rate limiting with configurable limits per endpoint interface RateLimitEntry { diff --git a/src/lib/store.ts b/src/lib/store.ts index e0346ac..d8e9327 100755 --- a/src/lib/store.ts +++ b/src/lib/store.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — Zustand Store +// SchulOS — Zustand Store import { create } from 'zustand'; import { setLocale, getLocale } from '@/lib/i18n'; diff --git a/src/lib/websocket.ts b/src/lib/websocket.ts index 113a920..024e041 100755 --- a/src/lib/websocket.ts +++ b/src/lib/websocket.ts @@ -1,4 +1,4 @@ -// CompetenceTrack — WebSocket Hook +// SchulOS — WebSocket Hook // Real-time collaboration and push notifications via Socket.IO 'use client'; diff --git a/worklog.md b/worklog.md index 8ee8ae8..d47d76c 100755 --- a/worklog.md +++ b/worklog.md @@ -38,7 +38,7 @@ Stage Summary: ### Summary -Built the Subject Content Management System for CompetenceTrack - a "Schlaukopf clone" educational content platform. Includes full CRUD API routes, comprehensive frontend component with role-based views, i18n support (90+ keys in DE+EN), and schlaukopf.de-style seed data. +Built the Subject Content Management System for SchulOS - a "Schlaukopf clone" educational content platform. Includes full CRUD API routes, comprehensive frontend component with role-based views, i18n support (90+ keys in DE+EN), and schlaukopf.de-style seed data. ### Files Created @@ -276,7 +276,7 @@ Unresolved issues / Next phase priorities: ### Summary -Built the **Illness Reporting with Parent Approval** and **Student-Teacher Communication Rooms** features for CompetenceTrack. These are critical features for a German school platform: illness reports require parent approval before becoming visible to teachers (privacy compliance), and communication rooms provide private student-teacher conversation channels. +Built the **Illness Reporting with Parent Approval** and **Student-Teacher Communication Rooms** features for SchulOS. These are critical features for a German school platform: illness reports require parent approval before becoming visible to teachers (privacy compliance), and communication rooms provide private student-teacher conversation channels. ### Files Created @@ -444,7 +444,7 @@ Added 80+ keys to both DE and EN sections: ### Summary -Implemented the Counseling/Guidance System, Disciplinary Committee System, and AI Test Generation features for CompetenceTrack. This includes 12 API route files, 3 view components, 130+ i18n keys, and store/navigation updates. +Implemented the Counseling/Guidance System, Disciplinary Committee System, and AI Test Generation features for SchulOS. This includes 12 API route files, 3 view components, 130+ i18n keys, and store/navigation updates. ### Files Created @@ -533,7 +533,7 @@ Implemented the Counseling/Guidance System, Disciplinary Committee System, and A ### Summary -Implemented the complete AI Integration system and Virtual Character/Chatbot system for CompetenceTrack. This includes 6 API routes, 2 major frontend components, 100+ i18n keys, and integration into the app layout. +Implemented the complete AI Integration system and Virtual Character/Chatbot system for SchulOS. This includes 6 API routes, 2 major frontend components, 100+ i18n keys, and integration into the app layout. ### Files Created @@ -673,7 +673,7 @@ Unresolved issues / Next phase priorities: ### Summary -Enhanced the visual design and polish of 8 components across CompetenceTrack. Focused on adding gradient headers, animated progress bars, skeleton loading states, empty state illustrations, typing indicators, online/offline status indicators, circular progress visualizations, shimmer effects, and improved message bubbles. All changes are purely visual - no functionality was modified. +Enhanced the visual design and polish of 8 components across SchulOS. Focused on adding gradient headers, animated progress bars, skeleton loading states, empty state illustrations, typing indicators, online/offline status indicators, circular progress visualizations, shimmer effects, and improved message bubbles. All changes are purely visual - no functionality was modified. ### Files Modified @@ -711,7 +711,7 @@ Enhanced the visual design and polish of 8 components across CompetenceTrack. Fo ### Summary -Enhanced the CompetenceTrack platform with teacher grading features (annotation, AI review, bulk grading) and deep styling improvements across all major components. +Enhanced the SchulOS platform with teacher grading features (annotation, AI review, bulk grading) and deep styling improvements across all major components. ### Files Created @@ -840,7 +840,7 @@ Unresolved issues / Next phase priorities: ### Summary -Built the Inter-School Competition Federation system and Enhanced Communication System for CompetenceTrack. The federation system allows schools in the same district to compete against each other with school rankings and team scores. The enhanced communication system adds voice chat, note sharing, file sharing, and teacher notes to the existing communication rooms. +Built the Inter-School Competition Federation system and Enhanced Communication System for SchulOS. The federation system allows schools in the same district to compete against each other with school rankings and team scores. The enhanced communication system adds voice chat, note sharing, file sharing, and teacher notes to the existing communication rooms. ### Files Created @@ -972,7 +972,7 @@ Unresolved issues / Next phase priorities: ### Summary -Built the Responsible Teacher (Klassenlehrer) management, Vice Principal management, enhanced calendar exam integration, student portal exam/study tips, and dashboard Klassenlehrer section for CompetenceTrack. Includes full API routes, comprehensive frontend components with role-based views, i18n support (90+ keys in DE+EN), and deep styling improvements. +Built the Responsible Teacher (Klassenlehrer) management, Vice Principal management, enhanced calendar exam integration, student portal exam/study tips, and dashboard Klassenlehrer section for SchulOS. Includes full API routes, comprehensive frontend components with role-based views, i18n support (90+ keys in DE+EN), and deep styling improvements. ### Files Created @@ -2091,7 +2091,7 @@ Stage Summary: ## Task ID: 2-a Agent: Grade Analytics & Reporting Builder -Task: Build Grade Analytics & Reporting View for CompetenceTrack +Task: Build Grade Analytics & Reporting View for SchulOS Work Log: - Added GradeReport model to Prisma schema with fields: schoolId, generatedBy, title, type, dateRange, classIds, subjectIds, metrics, status, fileData, createdAt