# Abitur OS

Persönliches Abitur-, Lern- und Studienverwaltungssystem für Q11/1 bis
Abitur und das anschließende Studium. Laravel 12 (Blade, Alpine.js,
Tailwind CSS) mit MySQL/MariaDB als Persistenzschicht.

Architektur & Datenmodell: [docs/architecture.md](docs/architecture.md)
Deployment auf dem eigenen Root-Server: [docs/deployment.md](docs/deployment.md)

## Voraussetzungen

- PHP 8.4+
- Composer 2.x
- MySQL oder MariaDB (produktiv) — für Tests wird automatisch SQLite in-memory genutzt
- Node.js + npm (nur für den Frontend-Build)
- Git (optional — der Code lässt sich auch ohne Git per Dateikopie übertragen)

## Lokale Installation

```bash
composer install
npm install

cp .env.example .env
php artisan key:generate
```

`.env` anpassen: `DB_DATABASE`, `DB_USERNAME`, `DB_PASSWORD` auf eine
lokal laufende MySQL-/MariaDB-Instanz zeigen lassen (Datenbank vorher
anlegen, `CREATE DATABASE abitur_os CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;`).

```bash
php artisan migrate
# Alternative ohne artisan: mysql -u USER -p abitur_os < database/schema.sql

# optional: Demo-Account mit Beispieldaten (demo@example.com / password)
php artisan db:seed

php artisan storage:link
npm run build
php artisan serve
```

Für die Entwicklung mit automatischem Asset-Rebuild:

```bash
npm run dev
```

## Queue-Worker & Scheduler (lokal, optional)

Für KI-Jobs und geplante Aufgaben (Erinnerungen, Fristprüfungen):

```bash
php artisan queue:work
php artisan schedule:work
```

## Tests

```bash
php artisan test
```

## Deployment auf dem eigenen Root-Server

Vollständige Schritt-für-Schritt-Anleitung (Server vorbereiten, PHP,
MySQL/MariaDB, Nginx, SSL, Queue-Worker, Scheduler, Backups):
**[docs/deployment.md](docs/deployment.md)**

Kurzfassung: der komplette Projektordner (inkl. bereits fertig gebauter
`vendor/`- und `public/build/`-Ordner) wird 1:1 auf den Server kopiert —
Composer/Node müssen dort nicht installiert sein. Für die Datenbank
reicht ein direkter Import von `database/schema.sql` (per `mysql`-CLI,
phpMyAdmin oder Adminer) statt Migrationen von Hand auszuführen.

```bash
# auf dem Server, im Projektordner:
mysql -u DEIN_USER -p DEINE_DATENBANK < database/schema.sql

cp .env.example .env   # nur 2 Werte eintragen: APP_URL, DB_PASSWORD
bash deploy/deploy.sh --fresh
```

Updates danach (neuen Ordner rüberkopieren oder `git pull`):

```bash
bash deploy/deploy.sh
```

## Projektstruktur

Domänen-orientierte Struktur unter `app/` (Controllers, Models, Services,
Policies je Fachbereich: Schule, Abitur, KI, Studium, Ziele) — siehe
[docs/architecture.md](docs/architecture.md) für Details zu
Datenmodell, KI-Architektur und Sicherheitskonzept.

## Lizenz

Privates Projekt.
