Files
schulos/docs/ARCHITECTURE.md
Z User 9ce58565ba i18n: Fix 44 additional hardcoded English strings across 15 files
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
2026-09-06 15:11:41 +00:00

41 lines
1.8 KiB
Markdown
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 `-wal` and `-shm` files 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.ts` is 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 `.env` or 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.