Fixed files: - competitions-view.tsx: 10 strings (placeholders, labels) - subjects-view.tsx: 11 strings (types, actions, placeholders) - professional-calendar.tsx: 5 strings (event type labels) - illness-reporting-view.tsx: 3 strings (status badges) - student-detail-view.tsx: 4 strings (health form placeholders) - data-table.tsx: 2 strings (search, empty state) - compliance-wizard.tsx: 2 strings (name, state) - settings-view.tsx: 1 string (Skipped) - competence-flower-view.tsx: 1 string (Active) - disciplinary-view.tsx: 1 string (All clear) - district-management-view.tsx: 1 string (No recent activity) - competitions-view.tsx: 1 string (Stock) - ui/pagination.tsx: 3 strings (Previous, Next, More pages) - ui/breadcrumb.tsx: 1 string (More) - ui/carousel.tsx: 2 strings (Previous/Next slide) - ui/sidebar.tsx: 1 string (Sidebar title) Total: 44 hardcoded English strings replaced with German
1.8 KiB
Executable File
1.8 KiB
Executable File
Architecture
SchoolOS is a single Next.js application with TypeScript, Prisma, and SQLite. It is intentionally deployable as one self-hosted container for a single school. Core personal data remains in SQLite; generated uploads, exports, and backups live in persistent local storage.
Components
- Next.js App Router hosts the UI and API routes.
- Prisma owns schema validation, migrations, and database access.
- SQLite is the default relational store. Use WAL mode in the deployment
bootstrap and retain the database plus
-waland-shmfiles during backups. - The storage layer uses local filesystem paths first. Future S3-compatible storage must use the same storage interface rather than feature-specific SDKs.
src/lib/storage.tsis the single local filesystem boundary. It constrains uploads, exports, and backups to configured roots and rejects path traversal.- Notification, Calendar, Policy, and Authorization remain shared services; feature modules must not create duplicate delivery, date, or permission logic.
Deployment Boundary
docker-compose.yml runs the application with a named /data volume:
/data/db: SQLite database files/data/uploads: uploaded evidence and documents/data/exports: generated reports and rights exports/data/backups: verified backups
Use a reverse proxy that terminates TLS in production. Configure
NEXT_PUBLIC_APP_URL with the public HTTPS URL.
Security Notes
- Server-side authorization is mandatory; hiding navigation does not grant access control.
- Secrets belong only in
.envor deployment secret management. - AI is optional and must remain disabled until policy/DPIA gates allow it.
- This engineering documentation is not legal advice. A school must involve its DPO, Schultrager, and Personalrat before production use.