Vault initial

This commit is contained in:
Hermes (Server)
2026-08-17 10:56:15 +02:00
parent 26cc1e86b0
commit 3274c11938
12 changed files with 625 additions and 192 deletions
+133
View File
@@ -0,0 +1,133 @@
# Melo 1.0 Code-Audit & Design-Review
**Datum:** 26.07.2026
**Repo:** `/home/dustin/git/melo_app/` (27 Dart-Dateien, v2.7 laut Logger)
---
## 🔴 TOTE BUTTONS (führen zu nichts oder zum falschen Ziel)
### 1. BottomNavigationBar 3 von 5 Tabs defekt!
**Datei:** `lib/screens/home_screen.dart` Zeile 367371
| Tab | Label | Was passiert | Sollte passieren |
|-----|-------|-------------|------------------|
| 🎵 Musik | Index 0 | ✅ Home-Screen | ✅ richtig |
| ⬇ Downloads | Index 1 | ✅ DownloadScreen | ✅ richtig |
| 🏷️ Tags | Index 2 | ❌ öffnet **PlaylistSheet**! | Sollte nach Tags filtern o. Tag-Manager zeigen |
| ❤️ Favoriten | Index 3 | ❌ öffnet **PlaylistSheet**! | Sollte favorisierte Songs filtern |
| ⚙️ Einstellungen | Index 4 | ❌ **KEIN Handler** tut gar nichts! | Sollte Einstellungen-Seite zeigen |
```dart
// Aktueller Code (defekt):
onTap: (i) {
setState(() => _aktiverTab = i);
if (i == 2) _zeigePlaylistSheet(); // FALSCH: Tags → Playlists
if (i == 3) _zeigePlaylistSheet(); // FALSCH: Favoriten → Playlists
// i == 4 → KEIN Code! Einstellungen-Tab tot.
},
```
### 2. Auskommentierte Widgets (Features existieren, sind aber deaktiviert)
**Datei:** `lib/screens/home_screen.dart` Zeile 272291
- **RecentWidget** (Zeile 273): `// RecentWidget(songs: _vm.letzteSongs, onPlay: _vm.spieleSong),`
- Zeigt "Zuletzt gehört" Code existiert in `lib/widgets/recent_widget.dart`, korrekt implementiert
- **TagStatsWidget** (Zeile 290): `// TagStatsWidget(tagCounts: _vm.tagCounts),`
- Zeigt Tag-Häufigkeiten farbcodiert Code existiert in `lib/widgets/tag_stats_widget.dart`, korrekt implementiert
### 3. Alle anderen Buttons ✅ intakt
- MeloHeader (Cloud/Suche/Download): alle 3 funktional
- SongTile (Edit/Favorit/Playlist/Play): alle funktional
- MiniPlayer (Play/Pause/Skip): alle funktional
- DownloadScreen (Ordner/Download/Abbrechen): alle funktional
- PlaylistSheet (Neu/Öffnen/Löschen): alle funktional
- NavidromeBrowser (Verbinden/Alben/Stream/Download): alle funktional
---
## 🎨 DESIGN-ANALYSE & VERSCHÖNERUNGSVORSCHLÄGE
### Aktuelles Design (Bestandsaufnahme)
- **Farbschema:** Dark Theme Schwarz `#0D0D0D`, Dunkelgrau `#1A1A1A`/`#2A2A2A`, Rot `#CC0000` als Akzent
- **Typografie:** System-Standardschrift, keine Custom-Font. Nur Größen-Variation (9-28px).
- **Layout:** Standard-Material mit BottomNavigationBar, ListView, Cards
- **Rundungen:** Konsistent 8-14px Border-Radius
- **Icons:** Material Icons, teils mit Emoji (♪, 💿, 🎵, 💌)
- **Animationen:** Nur implizit (FAB, BottomSheet); keine expliziten
### 🔥 Top 10 Verschönerungs-Maßnahmen (priorisiert)
#### 1. **Custom-Schriftart** Höchste Wirkung, geringer Aufwand
- Schriftart wie **Inter** oder **Poppins** via `google_fonts` einbinden
- Sofort moderneres, hochwertigeres Look & Feel
- `pubspec.yaml``google_fonts: ^6.1.0`
#### 2. **Glassmorphism-Effekte**
- MiniPlayer + StatistikCard mit `BackdropFilter` + `blur`
- Transparenter, schwebender Look statt flache Container
- `ClipRRect` mit `BackdropFilter(brightness: 0.2, saturation: 0.3)`
#### 3. **Subtiler Hintergrund-Gradient**
- Statt `MeloTheme.schwarz` ein radialer Gradient von `#1A0505` nach `#0D0D0D`
- Gibt Tiefe, wirkt weniger "flach"
#### 4. **Song-Tiles mit Swipe-Gesten**
- Swipe links → Favorit toggeln
- Swipe rechts → Zur Playlist hinzufügen
- `flutter_slidable` Package
#### 5. **Skeleton-Loader / Shimmer**
- Statt `CircularProgressIndicator` beim Laden
- Placeholder-Karten mit `shimmer`-Animation
- Wirkt professioneller, weniger "Lade-Unterbrechung"
#### 6. **Hero-Animationen**
- MiniPlayer → Vollbild-Player mit fließendem Übergang
- Album-Cover als Hero-Widget
#### 7. **Leere-Zustände mit Icons/Illustration**
- "Noch keine Playlists" → mit großer Illustration + CTA-Button
- "Keine Treffer" → Such-Illustration
- Statt reinem Text
#### 8. **Animierte Tab-Indikatoren**
- BottomNavBar mit animiertem Indikator-Balken oder Dot
- Sanfte Farbverläufe beim Wechseln
#### 9. **Pull-to-Refresh** auf Song-Liste
- `RefreshIndicator` um die ListView
- Neu-Scannen per Wischgeste
#### 10. **Farbcodierte Fortschrittsbalken**
- Fortschritt farblich codieren (grau→gelb→grün bei Download-Fortschritt)
- Statt einfachem roten Balken
### Farbpaletten-Erweiterung (Vorschlag)
```dart
// Zusätzlich zu bestehenden Farben:
static const Color rotGlow = Color(0x40CC0000); // für Glow-Effekte
static const Color surfaceHell = Color(0xFF252525); // für Hover/Active
static const Color erfolg = Color(0xFF4CAF50); // Grün-Akzent
static const Color warnung = Color(0xFFFFC107); // Gelb-Akzent
```
### Auch interessant (niedrigere Priorität)
- **Waveform-Animation** im MiniPlayer (statt statischem Balken)
- **Konfetti-Effekt** nach erfolgreichem Download
- **Haptisches Feedback** bei Button-Taps (`HapticFeedback.lightImpact()`)
- **Dark-Mode-Only** mit OLED-optimiertem `#000000` für echte Schwarztöne
- **BottomSheet mit Drag-Handle** schon vorhanden → schön!
---
## 📊 Zusammenfassung
| Kategorie | Befund |
|-----------|--------|
| Tote Buttons | **3 von 5 Tabs defekt** Tags/Favoriten öffnen Playlists, Einstellungen tut nichts |
| Deaktivierte Widgets | RecentWidget + TagStatsWidget auskommentiert, Code intakt |
| Sonstige Buttons | Alle intakt ✅ |
| Design-Level | Solide Basis, Material 3 Dark Theme, konsistent |
| Größtes Manko | Keine Custom-Schriftart, flache Container, keine Animationen |
| Schnellster Gewinn | Custom Font + Glassmorphism + Gradient-Hintergrund |
+22
View File
@@ -0,0 +1,22 @@
# Brain Log — 2026-08-05 (Abend)
## Session: Melo Sprint D+E + Review
### Was passiert ist
- **Sprint D komplett** (v2.52): Favoriten-Sync-Fix (bidirektional), YT-Fallback, SyncService (Auto-Intervall, Notification), funktionierende Einstellungen
- **Sprint E komplett** (v2.53): Recaps 7T/Monat/Jahr, Tombstone-Sync, Konflikt-Report
- **Code Review D+E**: 3 MED-Findings (Tombstone-Race, DB-Insert neuer Songs, fehlende Tests) → gefixt → **FREIGABE**
- **APK v2.53.1** gebaut + geliefert (21,0 MB)
- **Merge-Dateien v7** regeneriert (briefing + code, 15.511 Zeilen)
### Highlights
- MED-2 war der Killer: Neue Server-Songs wurden NIE in die lokale DB geschrieben → bei jedem Sync GB-Re-Downloads + falsche "+neu"-Meldungen. Jetzt: DB-Insert mit cloud_id.
- Tombstones jetzt mit Server-Zeitstempel (datetime('now')) statt Client-Zeit → keine Uhr-Drift-Zombies mehr
### Nebenschauplatz
- YT-Link-Finder: UTF-8-Bug gefixt (0/25 → 4/25 pro Lauf) — 107/325 Songs mit Links, Cron holt Rest
### Offen
- Sprint F (Android Auto, Home-Widget)
- melo_cloud.py in eigenes Repo aufnehmen
- Tinker-Easter-Egg
+24
View File
@@ -0,0 +1,24 @@
# Brain Log — 2026-08-05 (Nacht)
## Session: Vibe-Tools-Recherche + Installationen
### Installiert
1. **youtube-full** (Skill) — Transkripte/Videos, kein API-Key
2. **gitingest-MCP** (3 Tools) — Repo→Text; funktioniert für öffentliche Repos; unser Gitea ist nicht öffentlich → Merge-Dateien bleiben für Claude (oder gitingest-CLI lokal)
3. **Vibe-Coder-MCP** v0.3.5 (CLI `vibe`) — Dev-Tools für Agents
4. **SkillClaw** (venv ~/skillclaw-venv) — **DeepSeek-kompatibel getestet ✅** (Proxy :30001 reichte DeepSeek durch), aber NICHT in Hermes verdrahtet (Proxy-Eingriff riskant, nur auf Freigabe)
5. **hermes-workspace****GUI läuft auf Port 3000** (Chat/Terminal/Memory/Skills/Inspector); volle Integration braucht Gateway-API-Server :8642 (Neustart nötig, Telegram kurz weg)
### Kanban-Erkenntnis
- **Swarm-Setup NICHT nötig** für Kanban an sich
- ABER: Telegram-Sessions laufen als Child-Kontext (`HERMES_DELEGATED_CHILD_CONTEXT=1`) → Kanban-Mutationen gesperrt
- → Kanban nur via CLI/GUI nutzbar, nicht aus Telegram. Für unseren Workflow kein Mehrwert → dokumentiert, nicht aktiv.
### Community-Recherche (Vibe Coding mit Hermes)
- Muster: Profil-Fleet, Rollen-Isolation, Subagent-Delegation, Skills als Command Center, Memory-Ebenen, Kanban
- Unser Setup folgt den Best-Practices bereits (Profile, Delegation, Skills, Review-Gate)
### Offen
- gitingest-CLI lokal testen (Merge-Datei-Ersatz für Claude)
- hermes-workspace volle Integration (Gateway :8642) — nur mit Freigabe
- SkillClaw-Proxys in Hermes — nur mit Freigabe
+24
View File
@@ -0,0 +1,24 @@
# Brain Log — 2026-08-05
## Session: Melo Sprint C + Vault-Workflow
### Was passiert ist
- **Sprint C abgeschlossen** (v2.51.4): 5-Tab-Navigation, Cloud-Dashboard, Schnellaktionen, Musikserver-Chip
- **Code Review**: 4 MED-Findings → gefixt → FREIGABE (passed=true)
- **APK v2.51.4** gebaut + geliefert (20,8 MB, arm64)
- **Merge-Dateien** v6 regeneriert (briefing + code, 14.139 Zeilen)
### Vault-Workflow eingerichtet
- [[Server Aingrad - Komplette Übersicht]] aktualisiert
- [[Melo App - Status]] neu erstellt
- Künftig: Notizen parallel im Vault (Notizen/ + Brain-Log)
### Nebenschauplatz
- SearXNG installiert (search.baka-net.de, Meta-Suche ohne API-Key)
- RSSHub entfernt (neue Version braucht API-Keys)
- Gehalts-Prognose Juli ~1.731 € / August ~1.383 € (15,10 €/Std, SK1, SH)
### Offen
- Sprint D (Android Auto, Home-Widget)
- INFO: Server-Songs werden nie in lokale DB geschrieben
- Tinker-Easter-Egg
+1
View File
@@ -1,2 +1,3 @@
{"schema":"o2b.metrics.v1","surface":"index","run_at":"2026-07-09T14:02:54.872Z","payload":{"added":3,"updated":0,"deleted":0,"alias_resolved":0,"relation_violations":0,"tier_drift":0}}
{"schema":"o2b.metrics.v1","surface":"index","run_at":"2026-07-23T11:12:04.985Z","payload":{"added":42,"updated":1,"deleted":1,"alias_resolved":0,"relation_violations":0,"tier_drift":0}}
{"schema":"o2b.metrics.v1","surface":"index","run_at":"2026-08-01T11:55:34.940Z","payload":{"added":8,"updated":1,"deleted":0,"alias_resolved":0,"relation_violations":0,"tier_drift":0}}
+164 -14
View File
@@ -1,7 +1,7 @@
{
"version": 1,
"events": 6,
"updatedAt": "2026-07-23T12:47:03.764Z",
"events": 7,
"updatedAt": "2026-08-01T11:55:35.134Z",
"paths": {
"Brain/INDEX.md": {
"strength": 0.3,
@@ -14,9 +14,9 @@
"accessCount": 1
},
"Brain/active.md": {
"strength": 0.1,
"lastAccessAt": 1784805125265,
"accessCount": 1
"strength": 0.2,
"lastAccessAt": 1785585335134,
"accessCount": 2
},
"Brain/inbox/sig-2026-07-09-brain-index.md": {
"strength": 0.1,
@@ -33,6 +33,11 @@
"lastAccessAt": 1784805125422,
"accessCount": 1
},
"Brain/inbox/sig-2026-07-12-default-model-deepseek.md": {
"strength": 0.1,
"lastAccessAt": 1785585335134,
"accessCount": 1
},
"Brain/inbox/sig-2026-07-16-auto-brain-load.md": {
"strength": 0.1,
"lastAccessAt": 1784805125422,
@@ -44,9 +49,9 @@
"accessCount": 1
},
"Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md": {
"strength": 0.1,
"lastAccessAt": 1784805125265,
"accessCount": 1
"strength": 0.2,
"lastAccessAt": 1785585335134,
"accessCount": 2
},
"Brain/inbox/sig-2026-07-19-server-port-map-2.md": {
"strength": 0.1,
@@ -63,6 +68,21 @@
"lastAccessAt": 1784810821353,
"accessCount": 2
},
"Brain/log/2026-07-12-session.md": {
"strength": 0.1,
"lastAccessAt": 1785585335134,
"accessCount": 1
},
"Brain/log/2026-07-12.a0360993.md": {
"strength": 0.1,
"lastAccessAt": 1785585335134,
"accessCount": 1
},
"Brain/log/2026-07-13.a0360993.md": {
"strength": 0.1,
"lastAccessAt": 1785585335134,
"accessCount": 1
},
"Brain/log/2026-07-16.a0360993.md": {
"strength": 0.1,
"lastAccessAt": 1784810821353,
@@ -89,9 +109,9 @@
"accessCount": 2
},
"Brain/log/2026-07-23.a0360993.md": {
"strength": 0.1,
"lastAccessAt": 1784805125265,
"accessCount": 1
"strength": 0.2,
"lastAccessAt": 1785585335134,
"accessCount": 2
},
"Brain/pinned.md": {
"strength": 0.2,
@@ -108,6 +128,11 @@
"lastAccessAt": 1784805125422,
"accessCount": 1
},
"Brain/preferences/pref-default-model-deepseek.md": {
"strength": 0.1,
"lastAccessAt": 1785585335134,
"accessCount": 1
},
"Brain/preferences/pref-server-port-map.md": {
"strength": 0.1,
"lastAccessAt": 1784805125265,
@@ -120,6 +145,21 @@
}
},
"coAccess": [
{
"a": "Brain/active.md",
"b": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"count": 2
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 2
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 2
},
{
"a": "Brain/INDEX.md",
"b": "Brain/log/2026-07-09.a0360993.md",
@@ -172,7 +212,7 @@
},
{
"a": "Brain/active.md",
"b": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"count": 1
},
{
@@ -185,6 +225,21 @@
"b": "Brain/inbox/sig-2026-07-19-server-port-map.md",
"count": 1
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-12-session.md",
"count": 1
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-12.a0360993.md",
"count": 1
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-13.a0360993.md",
"count": 1
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-19.a0360993.md",
@@ -197,7 +252,7 @@
},
{
"a": "Brain/active.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
@@ -295,6 +350,36 @@
"b": "Brain/preferences/pref-brain-index.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/log/2026-07-12-session.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/log/2026-07-12.a0360993.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/log/2026-07-13.a0360993.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-16-auto-brain-load.md",
"b": "Brain/inbox/sig-2026-07-16-check-system-time.md",
@@ -340,6 +425,21 @@
"b": "Brain/inbox/sig-2026-07-19-server-port-map.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-12-session.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-12.a0360993.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-13.a0360993.md",
"count": 1
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-19.a0360993.md",
@@ -352,7 +452,7 @@
},
{
"a": "Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
@@ -440,6 +540,51 @@
"b": "Soul.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12-session.md",
"b": "Brain/log/2026-07-12.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12-session.md",
"b": "Brain/log/2026-07-13.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12-session.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12-session.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12.a0360993.md",
"b": "Brain/log/2026-07-13.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12.a0360993.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-12.a0360993.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
"a": "Brain/log/2026-07-13.a0360993.md",
"b": "Brain/log/2026-07-23.a0360993.md",
"count": 1
},
{
"a": "Brain/log/2026-07-13.a0360993.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
"a": "Brain/log/2026-07-16.a0360993.md",
"b": "Brain/pinned.md",
@@ -490,6 +635,11 @@
"b": "Brain/preferences/pref-server-port-map.md",
"count": 1
},
{
"a": "Brain/log/2026-07-23.a0360993.md",
"b": "Brain/preferences/pref-default-model-deepseek.md",
"count": 1
},
{
"a": "Brain/log/2026-07-23.a0360993.md",
"b": "Brain/preferences/pref-server-port-map.md",
@@ -0,0 +1,14 @@
{
"ts": 1785585335134,
"queryHash": "38b54fdb",
"paths": [
"Brain/preferences/pref-default-model-deepseek.md",
"Brain/log/2026-07-23.a0360993.md",
"Brain/inbox/sig-2026-07-12-default-model-deepseek.md",
"Brain/log/2026-07-12.a0360993.md",
"Brain/log/2026-07-13.a0360993.md",
"Brain/log/2026-07-12-session.md",
"Brain/active.md",
"Brain/inbox/sig-2026-07-18-vps-plan-august-2026.md"
]
}