# Sendewerk Sendewerk ist die redaktionelle Webanwendung für den Weg vom vorbereiteten Inhalt bis zur moderierten und archivierten Sendung. Der aktuelle Stand umfasst ausschließlich Etappe 1: technisches Grundgerüst, persistente Beispieldaten und gekennzeichnete Gestaltungsvorschauen. Anmeldung, Bearbeitung und echte Live-Steuerung folgen in späteren Etappen. ## Voraussetzungen - Linux - Node.js 22.17 oder neuer (Node 24 LTS ist für das Cloudron-Image vorgesehen) - npm 10 oder neuer Cloudron, Docker, eine Domain und externe Dienste sind für den lokalen Betrieb nicht erforderlich. ## Frischer lokaler Start ```sh npm ci cp .env.example .env npm run setup npm run dev ``` Danach ist die Anwendung unter erreichbar. `setup` erstellt die konfigurierten Verzeichnisse, führt ausstehende Migrationen aus und lädt den reproduzierbaren Beispieldatensatz. Der Seed darf beliebig oft ausgeführt werden und ersetzt nur die von ihm verwalteten Beispieldaten. ## Konfiguration | Variable | Vorgabe | Bedeutung | | ---------------------- | ------------------------ | ----------------------------------- | | `SENDEWERK_DB_PATH` | `.data/sendewerk.sqlite` | Pfad zur persistenten SQLite-Datei | | `SENDEWERK_UPLOAD_DIR` | `.data/uploads` | Persistentes Upload-Verzeichnis | | `HOST` | adapterabhängig | Bind-Adresse des Produktionsservers | | `PORT` | `3000` | Port des Produktionsservers | Relative Sendewerk-Pfade werden vom Projektverzeichnis aus aufgelöst. In Cloudron liegen Datenbank und Uploads unter `/app/data`. ## Befehle | Befehl | Zweck | | -------------------- | ---------------------------------------------------------- | | `npm run setup` | Verzeichnisse, Migrationen und Seed für lokale Entwicklung | | `npm run db:migrate` | Ausstehende Migrationen atomar ausführen | | `npm run db:seed` | Reproduzierbare Beispieldaten laden | | `npm run dev` | Entwicklungsserver starten | | `npm run check` | Svelte- und TypeScript-Prüfung | | `npm run lint` | Formatierung und ESLint prüfen | | `npm test` | Verhaltenstests mit temporärer, getrennter Datenbank | | `npm run test:e2e` | Browserprüfungen gegen eine getrennte E2E-Datenbank | | `npm run build` | Produktionsartefakt in `build/` erstellen | | `npm start` | gebautes Artefakt mit `node build` starten | ## Lokaler Produktionslauf ```sh npm ci npm run setup npm run build HOST=127.0.0.1 PORT=3000 npm start ``` Der Healthcheck liegt unter und prüft auch den Datenbankzugriff. Vor der ersten Browserprüfung wird der Testbrowser einmalig installiert: ```sh npx playwright install chromium npm run test:e2e ``` ## Container und Cloudron Das frühe Cloudron-Paket besteht aus `Dockerfile`, `CloudronManifest.json` und `start.sh`. Ein lokaler Container-Smoke-Test kann nach dem Build so erfolgen: ```sh docker build -t sendewerk:local . docker run --rm -p 3000:3000 -v sendewerk-data:/app/data sendewerk:local ``` Das ersetzt keinen Test auf einem echten Cloudron. Insbesondere Addon-Backup, Restore, Proxy-Origin und das read-only Laufzeitdateisystem können erst dort abschließend geprüft werden. ## Dokumentation - `docs/ARCHITECTURE.md`: Systemgrenzen und geplanter Gesamtdatenbestand - `docs/DECISIONS.md`: technische Entscheidungen und offizielle Quellen - `docs/ACCEPTANCE.md`: Abnahmekriterien und konkrete Nachweise - `docs/STATUS.md`: aktueller Projektstand und bekannte Grenzen Der Anwendungscode steht unter der MIT-Lizenz. Rechte an später eingestellten Medien und redaktionellen Inhalten werden dadurch nicht verändert. Die direkten Laufzeit- und Werkzeugabhängigkeiten verwenden MIT- oder Apache-2.0-Lizenzen: Svelte/SvelteKit, Vite, Vitest, ESLint und `better-sqlite3` sind MIT-lizenziert; TypeScript und Playwright stehen unter Apache-2.0. Die Lockdatei fixiert den tatsächlich installierten Baum.