All checks were successful
Build & Push Docker Image to Gitea Registry / build-and-push (push) Successful in 12s
13 KiB
13 KiB
Brain.md - Projekt mischlabs.de Landing Page
Projektziel
Eine ansprechende Landing Page fuer mischlabs.de, die alle Dienste als Kacheln mit direkten Verlinkungen anzeigt. Laeuft als Docker-Container und wird ueber Git auto-deployed.
Aktueller Stand: Die Seite ist keine reine Linkliste mehr, sondern ein kompaktes Service-Dashboard mit Kategorien, Suche, Hintergrund-Statuscheck und PWA-Unterstuetzung.
Status
- Git-Repo initialisiert und Remote verbunden (https://git.mischlabs.de/MrDiderot/mischlabs.git)
- Dienste-Liste vom Screenshot erfasst (9 Services inkl. MiChess)
- Landing Page Design und Implementierung (index.html + style.css)
- Docker-Setup (Dockerfile, docker-compose.yml, nginx.conf)
- PWA-Grundlage fuer iOS/Home-Screen-Installation
- Dashboard v2 mit Kategorien, Suche und Live-Statusindikatoren
- Push zum Remote
- MiChess-Kachel hinzugefuegt (Commit lokal, Push steht aus wg. Auth-Fehler)
- Push des MiChess-Commits (Git-Auth-Token erneuern)
Verwandte Projekte
- auth (d:\Vibecoding\Website\auth) - Keycloak SSO fuer alle Dienste
- Repo: https://git.mischlabs.de/MrDiderot/auth.git
- Subdomain: auth.mischlabs.de
- Siehe auth/Brain.md fuer Details
Dienste-Uebersicht (8 Stueck)
| # | Subdomain | Beschreibung | Farbe/Accent |
|---|---|---|---|
| 1 | drive.mischlabs.de | Cloud-Speicher | #4285f4 (Blau) |
| 2 | git.mischlabs.de | Code-Repositories | #f05033 (Rot) |
| 3 | movies.mischlabs.de | Filme & Serien | #a855f7 (Lila) |
| 4 | audiobook.mischlabs.de | Hoerbuecher | #22c55e (Gruen) |
| 5 | password.mischlabs.de | Passwort-Manager | #eab308 (Gelb) |
| 6 | docs.mischlabs.de | Dokumentation | #06b6d4 (Cyan) |
| 7 | michess.mischlabs.de | Schach | #10b981 (Gruen) |
| 8 | tom.mischlabs.de | Persoenliche Seite | #ec4899 (Pink) |
Technische Entscheidungen
- Reines HTML + CSS mit minimalem Dashboard-/PWA-JS (kein Framework) - maximale Performance, minimales Docker-Image
- nginx:alpine als Base-Image - extrem leichtgewichtig (~5MB)
- Google Fonts (Inter) fuer moderne Typografie
- Inline SVG Icons - keine externen Dependencies
- CSS Grid mit
auto-fill+minmax(240px, 1fr)fuer responsives Layout - Dark Theme mit subtilen Glow-Effekten
- Staggered Animations: Kacheln faden nacheinander ein (9 Stueck)
- PWA: Manifest, Apple-Touch-Icon, App-Icons und Service Worker fuer installierbare iOS/Web-App
- Dashboard: Kategorien
Zugang,Medien,Arbeit,Persoenlich, Suche und clientseitige no-cors Statuschecks - Auth-Link: Zeigt auf die Keycloak Account Console (
/realms/mischlabs/account), nicht mehr auf die Admin-Konsole - Adminseite:
/admin.htmlnutzt Keycloak Authorization Code + PKCE fuer Login und bietet Editor/Statusdiagnose fuer Dienste
Docker-Setup
- Container-Name:
mischlabs - Base-Image:
nginx:alpine - Port-Mapping:
8085:80(anpassbar in docker-compose.yml) - Restart-Policy:
unless-stopped - nginx.conf: Caching fuer Static Assets (7 Tage), Security-Headers
Dateistruktur
mischlabs/
index.html - Haupt-HTML mit allen 9 Service-Kacheln
style.css - Komplettes Styling (Dark Theme, Grid, Animationen)
app.js - Suche, Filter, Statuschecks, Service-Worker-Registrierung
admin.html - SSO-geschuetzte Adminoberflaeche
admin.js - Keycloak PKCE Login, Editor, Statusdiagnose
services.json - Zentrale Service-/Kategorie-Konfiguration
offline.html - Offline-Fallback fuer installierte PWA
manifest.webmanifest - PWA-Metadaten fuer installierbare App
sw.js - Schlanker Service Worker mit App-Shell-Cache
icons/ - App-Icons fuer iOS/PWA
Dockerfile - nginx:alpine mit kopierten Static Files
docker-compose.yml - Container-Definition (Name: mischlabs, Port 8085)
nginx.conf - Server-Konfiguration, Caching, Security-Headers
.gitignore - Git-Ausschluesse
Brain.md - Dieses Dokument (KI-Uebergabe)
Deployment-Workflow
- Code aendern und committen
- Push zu git.mischlabs.de
- Auf dem Server:
git pull && docker compose up -d --build
Erkenntnisse & Notizen
- Alle Dienste laufen auf 192.168.178.88 mit verschiedenen Ports
- Oeffentlich erreichbar ueber *.mischlabs.de Subdomains (Cloudflare Tunnel)
- Port 8085 gewaehlt da gaengige Ports (80, 8080, 8090) bereits belegt
- Kein JavaScript noetig - pure CSS reicht fuer alle Effekte
color-mix()CSS-Funktion fuer dynamische Icon-Hintergruende- Git-Push-Fehler aufgetreten (Authentication failed) - Token muss erneuert werden
- DNS: Alte A-Records (185.181.104.242) von INWX wurden geloescht, nur noch Tunnel-Eintraege
- NAS hat kein git installiert - entweder Git Server Paket installieren oder wget nutzen
PWA-Stand 2026-05-21
- MischLabs wurde als PWA vorbereitet.
- iOS-relevante Meta-Tags in
index.html:apple-mobile-web-app-capableapple-mobile-web-app-status-bar-styleapple-mobile-web-app-titleapple-touch-icon
- Manifest:
name: MischLabsdisplay: standalonetheme_color: #10b981background_color: #0a0a0f
- Icons:
icons/app-icon-source.png(1024x1024, quadratischer Ausschnitt aus dem MischLabs-Bild)icons/apple-touch-icon-v2.png(180x180, frischer Dateiname gegen iOS-Icon-Cache)icons/apple-touch-icon.png(180x180, alte Kompatibilitaetskopie)icons/icon-192.png(192x192)icons/icon-512.png(512x512)icons/maskable-512.png(512x512, maskable)
- Service Worker:
- Cache-Name:
mischlabs-pwa-v4 - Cached die App-Shell (
/,index.html,offline.html,style.css?v=10,app.js?v=2,services.json?v=1, Manifest und Icons) - Navigationen fallen offline auf
offline.htmlzurueck
- Cache-Name:
- Dockerfile kopiert Manifest, Service Worker und Icons in das Nginx-Image.
nginx.confliefertmanifest.webmanifestmitapplication/manifest+jsonundsw.jsmit harten No-Cache-Headern aus.
Dashboard-v2-Stand 2026-05-21
- Neues Logo oben nutzt
icons/app-icon-source.png. - Die alte oeffentliche Auth-Kachel wurde auf die Keycloak Account Console umgebogen:
https://auth.mischlabs.de/realms/mischlabs/account - Kategorien:
- Zugang: SSO, Drive, Passwords
- Medien: Movies, Audiobooks, Books
- Arbeit: Git, MiChess
- Persoenlich: Tom
app.jsprueft Dienste im Hintergrund perfetch(..., { mode: "no-cors" }). Das ist bewusst nur ein Erreichbarkeitsindikator, kein vollwertiges Monitoring.
Adminseite Stand 2026-05-21
- URL:
https://mischlabs.de/admin.html - SSO-Client in Keycloak benoetigt:
- Client ID:
mischlabs-admin - Client type: OpenID Connect
- Client authentication: Off/Public Client
- Standard flow: On
- Valid redirect URI:
https://mischlabs.de/admin.html - Valid post logout redirect URI:
https://mischlabs.de/admin.html - Web origin:
https://mischlabs.de - Scopes:
openid email profile
- Client ID:
- Erlaubter Admin in der statischen UI:
preferred_username=mrdiderotoderemail=mail.misch@pm.me
- Aktuelle Grenze: Weil mischlabs noch rein statisch ueber Nginx laeuft, kann
/admin.htmlglobale Aenderungen noch nicht serverseitig speichern. Der Editor speichert lokal im Browser (localStorage) und kann eine neueservices.jsonexportieren. Fuer echte Live-Aenderungen braucht der naechste Schritt ein kleines Backend oder einen Gitea-Commit-Workflow. - Statusdiagnose nutzt Browser-Fetch mit
mode: "no-cors". Dadurch erkennt sie Erreichbarkeit/Timeouts, aber bei fremden Subdomains keine echten HTTP-Statuscodes. - Wenn der Browser die Pruefung wegen CORS/CORB blockiert (
Failed to fetch), wird der Dienst nicht mehr als offline markiert, sondern als "Nicht im Browser pruefbar". Das betraf z. B. Vaultwarden/password.mischlabs.de. - Fuer echte Fehlerdetails braucht es ein kleines Backend bzw. einen Statusproxy, der serverseitig
HEAD/GETprueft.
Statusproxy Stand 2026-05-21
mischlabswurde von Nginx auf einen kleinen Node-Server (server.js) umgestellt.- Der Node-Server serviert die statischen Dateien weiter und stellt
/api/statusbereit. /api/statusliefert:- Docker-Container via
/var/run/docker.sock - Watchtower-Logs und letzten Watchtower-Lauf
- Speicherplatz fuer
/volume1und/volume2, im Container gemountet als/host/volume1und/host/volume2 - Serverseitige Service-Checks mit HTTP-Status und Latenz
- Docker-Container via
- NAS-Compose fuer
mischlabsbraucht diese Mounts:
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- /volume1:/host/volume1:ro
- /volume2:/host/volume2:ro
- Aktuelle NAS-Werte bei Planung:
/volume1: 3.7T total, 2.5T used, 1.2T free, 68%/volume2: 104G total, 88G used, 12G free, 89%- Watchtower:
Scanned=23,Updated=0,Failed=0beim manuellen Lauf um 2026-05-21 14:16 UTC
Globale KI-Systemeinstellung (WICHTIG!)
Important
Arbeitsanweisung für alle KI-Systeme (LLM / Agenten): Nach dem erfolgreichen Abschluss einer Aufgabe oder eines Meilensteins MUSS automatisch ein strukturierter Eintrag in dieser
Brain.mdvorgenommen werden. Dieser Eintrag soll dokumentieren:
- Welche Änderungen an welchen Dateien vorgenommen wurden (inklusive Begründung).
- Welche neuen Features, Endpoints oder Design-Anpassungen integriert wurden.
- Der aktuelle Stand des Deployments und eventuelle offene Punkte oder nächste Schritte. Dies stellt sicher, dass alle nachfolgenden KI-Systeme und der Benutzer stets einen konsistenten, lückenlosen Projektverlauf nachvollziehen können.
Letzte Änderungen & Meilensteine (Stand: 2026-05-21)
- Erweitertes Admin-Tool (Universal Admin Panel):
- Docker Container Logs Modal: Integration eines interaktiven, terminal-ähnlichen Log-Overlays in
admin.htmlundadmin.js. Jeder Container auf der Übersicht sowie Watchtower bieten nun einen Logs-Button. Logs können dynamisch mit Tiefenbeschränkungen (50,150,300,500Zeilen) abgefragt und manuell aktualisiert werden. Backend-Endpunkt: GET/api/containers/:name/logs. - Live Service-Inspektion (
🔍): Status-Kacheln der Dienste bieten ein Lupensymbol. Klicks darauf starten eine serverseitige Node-Anfrage (CORS-frei) an die Zieladresse und geben Antwortlatenz, HTTP-Statuscode, vollständige HTTP-Header und eine Vorschau der ersten 1000 Zeichen der Antwort zurück. Backend-Endpunkt: GET/api/services/inspect. - Interaktiver NAS Verzeichnis-Scanner: Hinzufügen eines Ordnergrößen-Scanners im NAS-Speicher-Panel. Berechnet rekursiv Ordnergrößen für gemountete Volumes (
/host/volume1,/host/volume2), sortiert sie absteigend und erlaubt durch Anklicken von Unterordnern ein direktes Weiterscannen im entsprechenden Pfad. Backend-Endpunkt: GET/api/disks/scan-folder.
- Docker Container Logs Modal: Integration eines interaktiven, terminal-ähnlichen Log-Overlays in
- Premium Design-Branding:
- Textlogo mit Farbverlauf: Das "MischLabs"-Textlogo (
.brand h1) auf dem Dashboard (index.html) und im Adminbereich (admin.html) erstrahlt nun in einem modernen, dynamischen Farbverlauf von Blau (#38bdf8) zu Lila/Flieder (#c084fc) unter Verwendung von Text-Maskierungen. - Cache-Buster-Update: Cache-Busting-Parameter in den CSS-Verknüpfungen wurden auf
v=26erhöht, damit der geänderte Farbverlauf sofort ohne manuelles Cache-Leeren im Browser gerendert wird.
- Textlogo mit Farbverlauf: Das "MischLabs"-Textlogo (
- Git Deployment & Sync:
- Sämtliche Implementierungen wurden sicher staged, committet und direkt auf das selbstgehostete Gitea-Remote (
https://git.mischlabs.de/MrDiderot/mischlabs.git, Branchmaster) gepusht.
- Sämtliche Implementierungen wurden sicher staged, committet und direkt auf das selbstgehostete Gitea-Remote (
- Frontend Optimierung & Mobile Usability (Stand: 2026-05-22):
- PWA-Kachel Entfernung: Die ungenutzte "PWA Installierbar"-Statistik-Kachel wurde aus der oberen Übersichtsleiste (
index.html) entfernt. Das Layout der verbleibenden zwei Kacheln ("Online" & "Dienste") wurde instyle.cssauf ein stabiles, zentriertes 2-Spalten-Raster für Desktop und mobile Ansichten angepasst. - Kompakte Service-Kategoriefilter: Die Kategorieauswahl (
.segments) wurde aus der klebrigen (sticky) oberen.control-barherausgelöst und in einem separaten#categoryFilters-Bereich direkt über dem Dienste-Grid platziert. Sie verbraucht dadurch im ungescrollten Zustand keinen kostbaren Platz mehr auf Mobilgeräten. - Visual-Premium Redesign: Die Filter-Pills wurden verkleinert (Höhe von 36px auf 28px reduziert, kleinere Schriftgröße
0.78remund kompakteres Padding), linksbündig ausgerichtet und mit sanften Hover- & Aktiv-Transitions versehen. Zudem wurde der fälschlicherweise hinzugefügte dunkle Hintergrundbalken auf der.control-barvollständig entfernt, um den nahtlosen Backdrop-Blur-Effekt über dem globalen Farbverlauf wiederherzustellen. - Cache-Buster & PWA Cache Update: Die Cache-Busting-Parameter für
style.cssundapp.jswurden inindex.htmlhochgestuft (v=32bzw.v=38). Im Service-Worker (sw.js) wurde der Cache-Name aufmischlabs-pwa-v23erhöht und die App-Shell-Liste entsprechend angepasst, um ein sofortiges Update der App bei allen Nutzern ohne manuelles Cache-Leeren zu garantieren.
- PWA-Kachel Entfernung: Die ungenutzte "PWA Installierbar"-Statistik-Kachel wurde aus der oberen Übersichtsleiste (