SwissKnife verstehen
Architektur
Aufbau, Bereitstellung und Deployment von SwissKnife.
SwissKnife ist eine reine Client-Anwendung. Sie besitzt weder Anwendungs-API noch Datenbank oder Authentifizierungsdienst.
Browser
→ React-Anwendung
→ Bilder: Canvas 2D
→ Audio / Video: FFmpeg WASM (ein Thread, sequenzielle Warteschlange)
→ FFmpeg-Kern: /ffmpeg/ffmpeg-core.js und /ffmpeg/ffmpeg-core.wasmIn der Docker-Produktion:
Nginx ohne Root-Rechte (Port 2501)
→ statische Dateien aus dist/
→ SPA-Fallback auf index.html
→ COOP-/COEP-/CSP-Header (SharedArrayBuffer)Geprüfter Stack
| Ebene | Aktuelle Wahl |
|---|---|
| Oberfläche | React 19, striktes TypeScript |
| Build | Vite 6, Tailwind CSS 4 |
| Bilder | Canvas-API |
| Audio / Video | @ffmpeg/ffmpeg 0.12 und lokale Kopie von @ffmpeg/core 0.12.6 |
| Container | Node 22 Alpine für den Build, Nginx unprivileged 1.27 Alpine zur Laufzeit |
| Prüfungen | ESLint, Vitest (npm test), tsc --noEmit |
Zwei getrennte Artefakte
| Artefakt | Befehl | Zweck |
|---|---|---|
| Standardprodukt | npm run build | Docker, GHCR und normales Deployment |
| Öffentliche Demo | npm run build:demo | ausschließlich die öffentliche Vercel-Demo |
Das Dockerfile führt npm run build aus. Die vercel.json des Produkt-Repositories führt npm run build:demo aus. Diese Befehle dürfen nicht vertauscht werden.
Compose-Dateien im Repository
| Datei | Image-Quelle |
|---|---|
docker-compose.yml | ghcr.io/lucas-lepajollec/swissknife:latest |
docker-compose.build.yml | lokaler Build aus dem Dockerfile |
Die Standardinstallation im Homelab lädt das veröffentlichte Image, statt den Checkout jedes Mal neu zu bauen.