- server.ts: Hono server with basic auth, GET/PUT/DELETE /api/* endpoints - defaults.json: extracted board defaults from index.html - Dockerfile: containerized for Coolify deployment - index.html: all state-layer rewritten from localStorage to fetch API Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1520 lines
41 KiB
JSON
1520 lines
41 KiB
JSON
{
|
||
"boards": {
|
||
"ringsystem": {
|
||
"name": "Ringsystem",
|
||
"goal": "Tool-agnostische Architektur — AGENTS.md kanonisch, CLAUDE.md/Codex/OpenCode als Symlinks. ARCHITECTURE.md definiert Ring 0–3.",
|
||
"wipLimit": 2,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 85
|
||
},
|
||
"overview": {
|
||
"tagline": "Privacy-Schichten von innen (alles privat) nach außen (öffentlich).",
|
||
"description": "Ring 0 (personal-vault) sieht alles und routet. Ring 1 trennt privat (robin-private) von beruflich (robin-work). Ring 2 = Sub-Projekte in Ring 1. Ring 3 = öffentliche Repos (doener-app, musichub, pleasance, …). Sichtbarkeit von innen nach außen — Referenzen NUR von außen nach innen.",
|
||
"summary": "Tool-Agnostik durchgesetzt: AGENTS.md ist die kanonische Datei, jedes andere Tool greift via Symlink darauf zu (CLAUDE.md → AGENTS.md, gleiche Konvention für Codex, OpenCode). Skill-Files werden über ~/.skills/{name}.md zentral geteilt. Aktuell: globale ~/.claude/CLAUDE.md auf Symlink-Modell migriert.",
|
||
"type": "meta",
|
||
"launches": [
|
||
{
|
||
"label": "ARCHITECTURE.md",
|
||
"sub": "Ring-Topologie + Dispatch-Konvention",
|
||
"url": "http://localhost:8765/dev/personal-vault/ARCHITECTURE.md",
|
||
"icon": "🔄"
|
||
},
|
||
{
|
||
"label": "Global AGENTS.md",
|
||
"sub": "~/.claude/AGENTS.md (= CLAUDE.md)",
|
||
"url": "http://localhost:8765/.claude/AGENTS.md",
|
||
"icon": "⚙"
|
||
},
|
||
{
|
||
"label": "Ring 0 AGENTS.md",
|
||
"sub": "personal-vault",
|
||
"url": "http://localhost:8765/dev/personal-vault/AGENTS.md",
|
||
"icon": "⊙"
|
||
},
|
||
{
|
||
"label": "Ring 1w AGENTS.md",
|
||
"sub": "robin-work",
|
||
"url": "http://localhost:8765/dev/robin-work/AGENTS.md",
|
||
"icon": "●"
|
||
},
|
||
{
|
||
"label": "Ring 1p AGENTS.md",
|
||
"sub": "robin-private",
|
||
"url": "http://localhost:8765/dev/robin-private/AGENTS.md",
|
||
"icon": "○"
|
||
},
|
||
{
|
||
"label": "Skills-Verzeichnis",
|
||
"sub": "~/.claude/skills/ (alle Skills)",
|
||
"url": "http://localhost:8765/.claude/skills/",
|
||
"icon": "🛠"
|
||
},
|
||
{
|
||
"label": "Rules-Verzeichnis",
|
||
"sub": "~/.claude/rules/ (Verhalten)",
|
||
"url": "http://localhost:8765/.claude/rules/",
|
||
"icon": "📐"
|
||
},
|
||
{
|
||
"label": "Kanban SPEC.md",
|
||
"sub": "~/dev/kanban/SPEC.md",
|
||
"url": "http://localhost:8765/dev/kanban/SPEC.md",
|
||
"icon": "📖"
|
||
}
|
||
],
|
||
"stack": [
|
||
"AGENTS.md (kanonisch)",
|
||
"CLAUDE.md (Symlink)",
|
||
"Codex/OpenCode (Symlink)",
|
||
"Skills via ~/.skills/",
|
||
"Dispatch via ~/.agent-signals/",
|
||
"Ring-Architektur"
|
||
],
|
||
"info": [
|
||
{
|
||
"label": "Naming-Konvention",
|
||
"value": "AGENTS.md ist Quelle; Tool-spezifische Files sind Symlinks darauf"
|
||
},
|
||
{
|
||
"label": "Ring 0",
|
||
"value": "~/dev/personal-vault/ — Vault, sieht alles, niemand sieht hier rein"
|
||
},
|
||
{
|
||
"label": "Ring 1 privat",
|
||
"value": "~/dev/robin-private/ — Privat-Workspace + Ring-2-Projekte"
|
||
},
|
||
{
|
||
"label": "Ring 1 beruflich",
|
||
"value": "~/dev/robin-work/ — Business-Workspace + Ring-2-Projekte"
|
||
},
|
||
{
|
||
"label": "Ring 2",
|
||
"value": "Sub-Projekte in Ring 1 — z.B. ~/dev/robin-work/projects/{name}/"
|
||
},
|
||
{
|
||
"label": "Ring 3",
|
||
"value": "Öffentliche Repos in ~/dev/ direkt — doener-app, musichub, pleasance, mdim, openclaw, docpilot, ai-engineering"
|
||
},
|
||
{
|
||
"label": "Skills",
|
||
"value": "~/.claude/skills/{name}/SKILL.md → Symlink auf ~/.skills/{name}.md (tool-agnostisch teilbar)"
|
||
},
|
||
{
|
||
"label": "Dispatch zwischen Ringen",
|
||
"value": "~/.agent-signals/dispatch/{workspace}.dispatch.md"
|
||
},
|
||
{
|
||
"label": "Sichtbarkeitsregel",
|
||
"value": "innen → außen: Ring 0 sieht alles, Ring 1 sieht Ring 2+3, Ring 2 sieht Ring 3"
|
||
},
|
||
{
|
||
"label": "Referenz-Regel",
|
||
"value": "außen → innen: nur wissen DASS innere Ringe existieren, NIEMALS Inhalte lesen oder leaken"
|
||
}
|
||
],
|
||
"commands": [
|
||
{
|
||
"label": "Globale AGENTS lesen",
|
||
"cmd": "cat ~/.claude/AGENTS.md"
|
||
},
|
||
{
|
||
"label": "ARCHITECTURE lesen",
|
||
"cmd": "cat ~/dev/personal-vault/ARCHITECTURE.md"
|
||
},
|
||
{
|
||
"label": "Alle Skills auflisten",
|
||
"cmd": "ls ~/.claude/skills/"
|
||
},
|
||
{
|
||
"label": "Symlink-Check",
|
||
"cmd": "find ~/dev/robin-work ~/dev/robin-private ~/dev/personal-vault -maxdepth 2 -name \"CLAUDE.md\" -type l"
|
||
}
|
||
]
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "AGENTS.md ## Aktueller Stand in allen Code-Repos auf 2-Bullet-Snapshot schrumpfen"
|
||
},
|
||
{
|
||
"t": "Codex/OpenCode Symlink-Setup verifizieren oder anlegen"
|
||
},
|
||
{
|
||
"t": "~/.skills/ als kanonischen Skill-Store dokumentieren"
|
||
},
|
||
{
|
||
"t": "Ring-Mapping-Tabelle in ARCHITECTURE.md aktuell halten (cmux-toolkit, khala etc.)"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "~/.claude/CLAUDE.md → AGENTS.md migriert (Symlink-Konvention)",
|
||
"doneAt": 1779580800000
|
||
},
|
||
{
|
||
"t": "Ringsystem-Meta-Board angelegt mit Overview aller relevanten MD-Files",
|
||
"doneAt": 1779580800000
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"kanban": {
|
||
"name": "Kanban (dieses Board)",
|
||
"goal": "Self-contained HTML-Kanban — ~/dev/kanban/index.html. Visualisierung des Ringsystems, Single Source of Truth für laufende Projekte.",
|
||
"wipLimit": 2,
|
||
"throughput": 3,
|
||
"sle": {
|
||
"days": 7,
|
||
"p": 85
|
||
},
|
||
"overview": {
|
||
"tagline": "Autopoiesis — das System, das sich selbst beobachtet und steuert.",
|
||
"description": "Single Source of Truth für alle laufenden Projekte. Visualisiert das Ringsystem (Ring 0 → Ring 3) als 5-Dimensionen-Layer: Gruppe (Domäne) × Ring (Privacy) × Board (Projekt) × Spalte (Flow-Status) × Karten-Class-of-Service. Self-contained HTML/CSS/JS, keine Build-Pipeline, kein Backend. State in localStorage. Anlehnung an Luhmanns Systemtheorie: das Kanban beobachtet sich selbst (dieses Meta-Board) und alle anderen Projekte gleichzeitig.",
|
||
"summary": "Reifegrad: produktionsreif für tägliche Nutzung. Aktuell in Iteration: Overview-Pages pro Projekt mit Hero-Icons, Quick-Launch, Secrets, Quick-Commands. Pilot war Döner-App. Ausstehend: Overview-Daten für die restlichen Boards.",
|
||
"type": "meta",
|
||
"launches": [
|
||
{
|
||
"label": "Kanban öffnen",
|
||
"sub": "~/dev/kanban/index.html",
|
||
"url": "http://localhost:8765/dev/kanban/index.html",
|
||
"icon": "📋"
|
||
},
|
||
{
|
||
"label": "Spec lesen",
|
||
"sub": "SPEC.md (Architektur + Test-Checkliste)",
|
||
"url": "http://localhost:8765/dev/kanban/SPEC.md",
|
||
"icon": "📖"
|
||
},
|
||
{
|
||
"label": "ARCHITECTURE.md",
|
||
"sub": "Ring-System kanonisch",
|
||
"url": "http://localhost:8765/dev/personal-vault/ARCHITECTURE.md",
|
||
"icon": "🔄"
|
||
},
|
||
{
|
||
"label": "CLAUDE.md global",
|
||
"sub": "Skill-Routing + Globals",
|
||
"url": "http://localhost:8765/.claude/CLAUDE.md",
|
||
"icon": "🤖"
|
||
}
|
||
],
|
||
"stack": [
|
||
"HTML5",
|
||
"CSS3 (Custom Properties)",
|
||
"Vanilla JS",
|
||
"HTML5 Drag & Drop API",
|
||
"localStorage",
|
||
"Monte-Carlo-Simulation",
|
||
"Little's Law",
|
||
"Luhmann-Autopoiesis"
|
||
],
|
||
"info": [
|
||
{
|
||
"label": "Datei",
|
||
"value": "/Users/robinchoice/dev/kanban/index.html"
|
||
},
|
||
{
|
||
"label": "Spec",
|
||
"value": "/Users/robinchoice/dev/kanban/SPEC.md"
|
||
},
|
||
{
|
||
"label": "Assets",
|
||
"value": "/Users/robinchoice/dev/kanban/assets/ (App-Icons)"
|
||
},
|
||
{
|
||
"label": "localStorage",
|
||
"value": "kanban_v2 · kanban_groups · kanban_board_order · kanban_ideas · kanban_ideas_seeded"
|
||
},
|
||
{
|
||
"label": "Tabs",
|
||
"value": "Overview (default) · Board · Analytics"
|
||
},
|
||
{
|
||
"label": "Gruppen",
|
||
"value": "Meta · Code · Beruflich · Web · Privat"
|
||
},
|
||
{
|
||
"label": "Ringe",
|
||
"value": "R0 (Meta) · R1p (privat) · R1w (beruflich) · R2 (Sub-Projekt) · R3 (öffentlich)"
|
||
},
|
||
{
|
||
"label": "Seed-Version",
|
||
"value": "v3 — 16 neue Ideen aus _archive (Songideen, Bitcoin Bank, Cypherpunk, …)"
|
||
}
|
||
],
|
||
"commands": [
|
||
{
|
||
"label": "Kanban öffnen",
|
||
"cmd": "open ~/dev/kanban/index.html"
|
||
},
|
||
{
|
||
"label": "Spec ansehen",
|
||
"cmd": "cat ~/dev/kanban/SPEC.md"
|
||
},
|
||
{
|
||
"label": "localStorage komplett resetten",
|
||
"cmd": "echo 'localStorage.clear()' // im Browser-Devtools-Console ausführen"
|
||
},
|
||
{
|
||
"label": "Backup-Dump",
|
||
"cmd": "cp ~/dev/kanban/index.html ~/dev/kanban/backup-$(date +%Y%m%d).html"
|
||
}
|
||
]
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "CFD (Cumulative Flow Diagram) via tägliche Snapshots"
|
||
},
|
||
{
|
||
"t": "Definition of Ready / Done pro Spalte editierbar"
|
||
},
|
||
{
|
||
"t": "Class-of-Service-Mix-Chart in Analytics"
|
||
},
|
||
{
|
||
"t": "PWA-Manifest für iPad Home-Screen (Stufe 1)"
|
||
},
|
||
{
|
||
"t": "Sync-Layer (Cloudflare Worker + KV) für Multi-Device (Stufe 3)"
|
||
},
|
||
{
|
||
"t": "AGENTS.md ## Aktueller Stand in allen Code-Repos auf 2-Bullet-Snapshot schrumpfen"
|
||
},
|
||
{
|
||
"t": "Filesystem-Sync (optional): Node-Backend Boards ↔ Ordner"
|
||
},
|
||
{
|
||
"t": "Card-Edit (Titel/Note direkt in der Karte)"
|
||
},
|
||
{
|
||
"t": "Sortierung INNERHALB einer Spalte per Drag"
|
||
},
|
||
{
|
||
"t": "Export / Backup als JSON-Dump"
|
||
},
|
||
{
|
||
"t": "Overview-Daten für alle restlichen Boards (musichub, openclaw, docpilot, k4, pleasance, mdim, …)"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": [
|
||
{
|
||
"t": "Robin testet das Board auf Herz & Nieren"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "WIP-Limit pro Board editierbar (Header-Pill)",
|
||
"doneAt": 1779580800000
|
||
},
|
||
{
|
||
"t": "Launch-Cards komplett klickbar (nicht nur ↗)",
|
||
"doneAt": 1779577200000
|
||
},
|
||
{
|
||
"t": "Overview komplett editierbar (alle Felder, Add/Remove Rows)",
|
||
"doneAt": 1779573600000
|
||
},
|
||
{
|
||
"t": "Auto-Aging — movedAt-Timestamp + Glow für überfällige Karten",
|
||
"doneAt": 1779570000000
|
||
},
|
||
{
|
||
"t": "Throughput-History — doneAt-Timestamp + reale 14-Tage-Berechnung",
|
||
"doneAt": 1779566400000
|
||
},
|
||
{
|
||
"t": "Flow Efficiency Berechnung korrigiert (WIP/(WIP+Ready))",
|
||
"doneAt": 1779562800000
|
||
},
|
||
{
|
||
"t": "Board-Name + Goal per Klick editierbar",
|
||
"doneAt": 1779559200000
|
||
},
|
||
{
|
||
"t": "kanban-mcp aus MCP-Config entfernt",
|
||
"doneAt": 1779555600000
|
||
},
|
||
{
|
||
"t": "_archive READMEs als DEPRECATED-Marker angelegt",
|
||
"doneAt": 1779552000000
|
||
},
|
||
{
|
||
"t": "Overview-Hero mit App-Icon + Tagline + Description",
|
||
"doneAt": 1779494400000
|
||
},
|
||
{
|
||
"t": "Tab-Reihenfolge: Overview · Board · Analytics",
|
||
"doneAt": 1779494400000
|
||
},
|
||
{
|
||
"t": "Overview-Pilot Döner-App (Quick-Launch, Hosting, Secrets, Commands)",
|
||
"doneAt": 1779408000000
|
||
},
|
||
{
|
||
"t": "Ring-Badge an Boards + Klick zum Wechseln",
|
||
"note": "R0/R1p/R1w/R2/R3 — Sidebar-Pill",
|
||
"doneAt": 1779321600000
|
||
},
|
||
{
|
||
"t": "Gruppen-Reihenfolge per Drag ändern",
|
||
"doneAt": 1779321600000
|
||
},
|
||
{
|
||
"t": "Task → Idee per Drag (Tag-Drop-Zone)",
|
||
"doneAt": 1779321600000
|
||
},
|
||
{
|
||
"t": "Meta-Gruppe + dieses Kanban-Board angelegt",
|
||
"doneAt": 1779235200000
|
||
},
|
||
{
|
||
"t": "SPEC.md komplett neu (Test-Checkliste für Tester-Agent)",
|
||
"doneAt": 1779235200000
|
||
},
|
||
{
|
||
"t": "Promote-Card-zu-Board (↗ Button)",
|
||
"doneAt": 1779148800000
|
||
},
|
||
{
|
||
"t": "Tiefenscan _archive → 16 neue Seed-Ideen v3",
|
||
"doneAt": 1779148800000
|
||
},
|
||
{
|
||
"t": "Card-Delete + Promote-Modal-Bug + Group-Create-Bug gefixt",
|
||
"doneAt": 1779062400000
|
||
},
|
||
{
|
||
"t": "Idee-DnD → Spalte + Board-Drag zwischen Gruppen + Board-Reorder",
|
||
"doneAt": 1779062400000
|
||
},
|
||
{
|
||
"t": "3-Spalten-Vereinfachung + Blocker-Flag statt Tags",
|
||
"doneAt": 1778976000000
|
||
},
|
||
{
|
||
"t": "Expedite-Swimlane (3 Zonen aligned zu Spalten)",
|
||
"doneAt": 1778976000000
|
||
},
|
||
{
|
||
"t": "Add-Card-Input + Add-Board-Modal + Add-Group",
|
||
"doneAt": 1778889600000
|
||
},
|
||
{
|
||
"t": "Ideen-Pinnwand rechts + 35 Seed-Ideen aus Ring-System",
|
||
"doneAt": 1778889600000
|
||
},
|
||
{
|
||
"t": "Monte-Carlo-Forecast + Kanban-KPIs (Cycle Time, Flow Efficiency, SLE)",
|
||
"doneAt": 1778803200000
|
||
},
|
||
{
|
||
"t": "localStorage-Persistierung + 5→3-Spalten-Migration",
|
||
"doneAt": 1778803200000
|
||
},
|
||
{
|
||
"t": "Initial-Setup: 14 Boards aus Robins Ring-System ingested",
|
||
"doneAt": 1778716800000
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"doener": {
|
||
"name": "Döner-App",
|
||
"goal": "iOS-App in Swift 6 + SwiftUI + MapKit. Ziel: tester-ready, dann App Store Launch.",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"overview": {
|
||
"icon": "assets/doener.png",
|
||
"tagline": "Find. Bewerte. Sammle. — eine Stempelkarte für Dönerläden.",
|
||
"description": "iOS-App zum Finden, Bewerten und Sammeln von Dönerläden. Offline-First mit Community-Layer: Check-Ins, Sauce/Fleisch/Brot-Ratings, persönliche Döner-Geschichte und Live-Status von Freunden. Karte nutzt OpenStreetMap via Overpass-API mit SwiftData-Caching (24h-Refresh). Gamification-Mechaniken angelehnt an Pokémon Go und Spotify Wrapped.",
|
||
"summary": "Sprint 3 — Launch-Readiness. Backend läuft auf Coolify (Hetzner). iOS-App vor dem Switch von LAN auf Prod-Backend. Sprints 1+2 fertig (Tester-Readiness + Backend-Sync + Freunde-Feed live). Aktuell: S3.2 Produktiv-Hosting in WIP, S3.8 Apple JWKS-Validierung als Security-Blocker.",
|
||
"type": "ios-app",
|
||
"launches": [
|
||
{
|
||
"label": "GitHub Repo",
|
||
"sub": "robinchoice/DoenerApp",
|
||
"url": "https://github.com/robinchoice/DoenerApp",
|
||
"icon": "⌥"
|
||
},
|
||
{
|
||
"label": "Coolify Dashboard",
|
||
"sub": "App jdna5c4…",
|
||
"url": "https://coolify.diespaetzles.lol",
|
||
"icon": "🚀"
|
||
},
|
||
{
|
||
"label": "App Store Connect",
|
||
"sub": "Beta noch nicht released",
|
||
"url": "https://appstoreconnect.apple.com",
|
||
"icon": "📱"
|
||
},
|
||
{
|
||
"label": "Apple Developer",
|
||
"sub": "Approval ausstehend",
|
||
"url": "https://developer.apple.com/account",
|
||
"icon": "⚙"
|
||
}
|
||
],
|
||
"stack": [
|
||
"Swift 6",
|
||
"SwiftUI",
|
||
"MapKit",
|
||
"SwiftData",
|
||
"Vapor",
|
||
"PostgreSQL + PostGIS",
|
||
"Docker",
|
||
"Coolify",
|
||
"Hetzner",
|
||
"Overpass API"
|
||
],
|
||
"info": [
|
||
{
|
||
"label": "Repo-Pfad",
|
||
"value": "~/dev/doener-app"
|
||
},
|
||
{
|
||
"label": "Backend-Stack",
|
||
"value": "Vapor (Swift) + PostgreSQL + PostGIS"
|
||
},
|
||
{
|
||
"label": "Coolify App-UUID",
|
||
"value": "jdna5c4aqx6bf6u10bs5j48n"
|
||
},
|
||
{
|
||
"label": "Coolify DB-UUID",
|
||
"value": "mzu4msj785xpe5nl6ypntb4d"
|
||
},
|
||
{
|
||
"label": "Coolify-Instanz",
|
||
"value": "coolify.diespaetzles.lol"
|
||
},
|
||
{
|
||
"label": "iOS APIConfig",
|
||
"value": "iOS/DoenerApp/.../APIConfig.swift (Switch LAN→Prod ausstehend)"
|
||
},
|
||
{
|
||
"label": "Hosting",
|
||
"value": "Hetzner VPS + Coolify, deployed via git.diespaetzles.lol"
|
||
},
|
||
{
|
||
"label": "Apple JWKS",
|
||
"value": "S3.8 — Signaturprüfung implementieren (SECURITY-BLOCKER)"
|
||
}
|
||
],
|
||
"secrets": [
|
||
{
|
||
"label": "COOLIFY_SPAETZLES_TOKEN",
|
||
"value": "(bitte aus ~/.secrets eintragen oder env-ref lassen)",
|
||
"masked": true
|
||
},
|
||
{
|
||
"label": "GitHub Secret — COOLIFY_TOKEN",
|
||
"value": "(bitte eintragen)",
|
||
"masked": true
|
||
},
|
||
{
|
||
"label": "GitHub Secret — COOLIFY_APP_UUID",
|
||
"value": "jdna5c4aqx6bf6u10bs5j48n"
|
||
},
|
||
{
|
||
"label": "Apple Bundle ID",
|
||
"value": "(bitte eintragen — z.B. com.robinchoice.DoenerApp)"
|
||
},
|
||
{
|
||
"label": "Apple Team ID",
|
||
"value": "(bitte eintragen)"
|
||
}
|
||
],
|
||
"commands": [
|
||
{
|
||
"label": "Deploy triggern",
|
||
"cmd": "curl -X POST -H \"Authorization: Bearer $COOLIFY_SPAETZLES_TOKEN\" https://coolify.diespaetzles.lol/api/v1/applications/jdna5c4aqx6bf6u10bs5j48n/start"
|
||
},
|
||
{
|
||
"label": "Repo öffnen",
|
||
"cmd": "cd ~/dev/doener-app && code ."
|
||
},
|
||
{
|
||
"label": "Logs anschauen",
|
||
"cmd": "curl -H \"Authorization: Bearer $COOLIFY_SPAETZLES_TOKEN\" https://coolify.diespaetzles.lol/api/v1/applications/jdna5c4aqx6bf6u10bs5j48n/logs"
|
||
}
|
||
]
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "App-Store-Launch als Sprint Goal definieren"
|
||
},
|
||
{
|
||
"t": "S4.A Pokémon-Go Sammelmechanik"
|
||
},
|
||
{
|
||
"t": "S4.B Snapchat-Heatmap"
|
||
},
|
||
{
|
||
"t": "S4.C Döner-Symbole statt Sterne"
|
||
},
|
||
{
|
||
"t": "S4.D Community-Summary mit KI"
|
||
},
|
||
{
|
||
"t": "S4.E In-App Feedback für Tester"
|
||
},
|
||
{
|
||
"t": "S3.5 Push Notifications"
|
||
},
|
||
{
|
||
"t": "S3.6 Freunde per Kontakte finden"
|
||
},
|
||
{
|
||
"t": "S3.7 Leaderboards"
|
||
},
|
||
{
|
||
"t": "S3.8 Apple JWT Signaturprüfung",
|
||
"blocked": true,
|
||
"cos": "fixed"
|
||
},
|
||
{
|
||
"t": "S3.3 Google Maps Places API",
|
||
"blocked": true,
|
||
"cos": "expedite"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": [
|
||
{
|
||
"t": "S3.2 Produktiv-Hosting",
|
||
"blocked": true,
|
||
"cos": "expedite",
|
||
"age": 30
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "Sprint 1: Tester-Readiness",
|
||
"note": "Sprint 1 komplett ✅"
|
||
},
|
||
{
|
||
"t": "Sprint 2: Backend-Sync",
|
||
"note": "Sprint 2 komplett ✅"
|
||
},
|
||
{
|
||
"t": "S3.4 Freunde-Feed + Live-Status",
|
||
"note": "Backend + iOS fertig, Build grün"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"musichub": {
|
||
"name": "Music Hub",
|
||
"goal": "Label-Kollaborations-Webapp: SvelteKit + Hono + Postgres. Phase 3: Background Sync.",
|
||
"wipLimit": 3,
|
||
"throughput": 3,
|
||
"sle": {
|
||
"days": 21,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Status quo klären + neues Sprint Goal definieren"
|
||
},
|
||
{
|
||
"t": "Phase 3: Background Sync (IDB-Queue, SW sync-Handler)"
|
||
},
|
||
{
|
||
"t": "Onboarding-Role für Backend-Personalisierung nutzen"
|
||
},
|
||
{
|
||
"t": "DB is_public nach STEM-Tests auf privat setzen"
|
||
},
|
||
{
|
||
"t": "RESEND_API_KEY setzen für E-Mail-Versand",
|
||
"blocked": true
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "PWA Phase 2: Push Notifications (VAPID)",
|
||
"note": "VAPID, push_subscriptions, SW-Handler"
|
||
},
|
||
{
|
||
"t": "Listen Analytics + Reject with Feedback",
|
||
"note": "IP-Hashing, sendBeacon"
|
||
},
|
||
{
|
||
"t": "SSE Real-time (EventSource, Pub/Sub)",
|
||
"note": "version:new / comment:new"
|
||
},
|
||
{
|
||
"t": "Onboarding Flow + Bottom Navigation Mobile",
|
||
"note": "3-Step Overlay, safe-area-aware"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"openclaw": {
|
||
"name": "OpenClaw / Rob",
|
||
"goal": "Eigener 24/7-KI-Assistent auf Dell OptiPlex. Gemma 4, Telegram-Bridge, MCP-Tools.",
|
||
"wipLimit": 2,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 80
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Whisper Voice-Messages Container stabilisieren"
|
||
},
|
||
{
|
||
"t": "TELEGRAM_CHAT_ID setzen"
|
||
},
|
||
{
|
||
"t": "Modellwechsel + openclaw-upgrade",
|
||
"blocked": true,
|
||
"cos": "expedite"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"docpilot": {
|
||
"name": "docpilot",
|
||
"goal": "Git-getriggerte Doku-Updates via Claude API. v1: README-Modus → PR.",
|
||
"wipLimit": 2,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Spec schreiben: v1 README-Modus"
|
||
},
|
||
{
|
||
"t": "Repo anlegen + CLAUDE.md einrichten"
|
||
},
|
||
{
|
||
"t": "GitHub Action: Diff → Claude → PR"
|
||
},
|
||
{
|
||
"t": "Erster Live-Test: Perpetual Traveler Repo"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"k4": {
|
||
"name": "K4 Digital — Ronal Edge Rollout",
|
||
"goal": "Freelance PM: OT-Security-Rollout für Ronal Group. 7 Werke, 326 EdgeFire + 20 EdgeIPS (TXOne Networks).",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 7,
|
||
"p": 90
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Ticketsystem: Passwort ändern nach erstem Login"
|
||
},
|
||
{
|
||
"t": "Eskalationsprozess definieren (Mail + Ticketsystem) → Timo/Günter"
|
||
},
|
||
{
|
||
"t": "Contact List für EdgeOne-Zugang → Luis"
|
||
},
|
||
{
|
||
"t": "Syslog-Problem: Detail-Call mit Luis + Ronny"
|
||
},
|
||
{
|
||
"t": "Remote Access freigeben (Benjamin Veit)"
|
||
},
|
||
{
|
||
"t": "Spain-Site: Baseline-Dokumentation erstellen (neue Template-Site)"
|
||
},
|
||
{
|
||
"t": "Solcomp on-site Mexico — 2026-05-21",
|
||
"cos": "fixed"
|
||
},
|
||
{
|
||
"t": "Solcomp on-site Mexico — 2026-05-28",
|
||
"cos": "fixed"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "NDA unterzeichnet"
|
||
},
|
||
{
|
||
"t": "Global Rollout Kick-off Call moderiert",
|
||
"note": "2026-05-18 — Ronal, TXOne, Solcomp, K4"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"branding": {
|
||
"name": "Branding & Außendarstellung",
|
||
"goal": "Logo, Farbschema, Typo, Fotos, Angebots-/Rechnungstemplate.",
|
||
"wipLimit": 2,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 80
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Logo + Farbschema + Typo festlegen"
|
||
},
|
||
{
|
||
"t": "Professionelle Fotos — Termin vereinbaren"
|
||
},
|
||
{
|
||
"t": "Angebots-/Rechnungstemplate mit Pandoc+Typst"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"psk": {
|
||
"name": "PSK I Zertifizierung",
|
||
"goal": "PSK I bestanden ✅. Jetzt: Kurs bei K4 als Trainer durchführen.",
|
||
"wipLimit": 1,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 7,
|
||
"p": 95
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Control Chart ↔ Agent Chart gegenüberstellen"
|
||
},
|
||
{
|
||
"t": "Gyra aufhübschen — neues Beispiel (SLA + Definition of Workflow)"
|
||
},
|
||
{
|
||
"t": "Stammbaum: Lean → Agil → Kanban → Scrum"
|
||
},
|
||
{
|
||
"t": "Lead Time & Flow Efficiency — kurzer Abriss"
|
||
},
|
||
{
|
||
"t": "Frage 185: 3 vs. 5 Feedback Loops in Scrum klären"
|
||
},
|
||
{
|
||
"t": "SLE-Formel zugänglich erklären"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "Lernplan durcharbeiten",
|
||
"note": "Zertifizierungsphase abgeschlossen"
|
||
},
|
||
{
|
||
"t": "Mock-Prüfung / Self-Assessment",
|
||
"note": "PSK I bestanden ✅"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"pleasance": {
|
||
"name": "Pleasance",
|
||
"goal": "Atelier-Hub-Site: Kontaktformular gebaut. RESEND_API_KEY + DNS + weitere Seiten ausstehend.",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "RESEND_API_KEY in Coolify setzen",
|
||
"blocked": true
|
||
},
|
||
{
|
||
"t": "DNS A-Record api.pleasance.org → VPS-IP"
|
||
},
|
||
{
|
||
"t": "Resend + Kontaktformular-E-Mail testen"
|
||
},
|
||
{
|
||
"t": "Hetzner VPS bestellen + Coolify installieren"
|
||
},
|
||
{
|
||
"t": "pleasance.org von Vercel → Coolify migrieren"
|
||
},
|
||
{
|
||
"t": "Inhalte aus pleasance-thoughts integrieren"
|
||
},
|
||
{
|
||
"t": "studio.html + buehne.html + projekte.html"
|
||
},
|
||
{
|
||
"t": "img/robin.jpg besorgen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "kontakt.html: Drei Doors → Formular"
|
||
},
|
||
{
|
||
"t": "coaching.html: alle Links → kontakt.html"
|
||
},
|
||
{
|
||
"t": "api/: Bun/Hono POST /contact mit Resend"
|
||
},
|
||
{
|
||
"t": "lernplatform-fork gelöscht",
|
||
"note": "Durch analyze-sources abgedeckt"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"mdim": {
|
||
"name": "mydrugismusic Website",
|
||
"goal": "Website-Relaunch: Astro 5 + Directus CMS, deployed via Coolify.",
|
||
"wipLimit": 2,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 21,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Aktuellen Stand prüfen + offene Tasks erfassen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"eu": {
|
||
"name": "Einzelunternehmen",
|
||
"goal": "Buchhaltung, Banking und operative Verwaltung des Einzelunternehmens.",
|
||
"wipLimit": 2,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 80
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Lexoffice anschauen + M26 sortieren"
|
||
},
|
||
{
|
||
"t": "Zweites Businesskonto eröffnen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"privat": {
|
||
"name": "Haushalt & Leben",
|
||
"goal": "Persönliche Projekte, Haushalt, Anschaffungen.",
|
||
"wipLimit": 2,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 80
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Roborock starten"
|
||
},
|
||
{
|
||
"t": "Wäsche anschmeißen"
|
||
},
|
||
{
|
||
"t": "Fahrradkette reparieren"
|
||
},
|
||
{
|
||
"t": "Analogkameras an die Wand bringen"
|
||
},
|
||
{
|
||
"t": "Bilder aufhängen"
|
||
},
|
||
{
|
||
"t": "Haken im Schlafzimmer aufhängen"
|
||
},
|
||
{
|
||
"t": "Korkpinwand fürs Büro kaufen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"degoogle": {
|
||
"name": "De-Google / FOSS Migration",
|
||
"goal": "Migration zu self-hosted + FOSS. Nextcloud und Immich laufen bereits.",
|
||
"wipLimit": 2,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 80
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Google Fotos → Immich Migration"
|
||
},
|
||
{
|
||
"t": "Matrix/Conduwuit self-hosted + Bridges"
|
||
},
|
||
{
|
||
"t": "Google Meet → Jitsi Meet self-hosted"
|
||
},
|
||
{
|
||
"t": "Apple Podcasts → AntennaPod / Podverse"
|
||
},
|
||
{
|
||
"t": "Apple Bücher → KOReader + Calibre-Web"
|
||
},
|
||
{
|
||
"t": "VPN: Mulvad einrichten"
|
||
},
|
||
{
|
||
"t": "Mail-Server evaluieren: Stalwart Mail"
|
||
},
|
||
{
|
||
"t": "GrapheneOS Migration (iPhone → Pixel)"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": [
|
||
{
|
||
"t": "Navigation: Organic Maps installieren",
|
||
"age": 7
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "Proton Passwortmanager → Bitwarden",
|
||
"note": "256 Items nach Vaultwarden migriert"
|
||
},
|
||
{
|
||
"t": "Google Authenticator → Aegis / Raivo",
|
||
"note": "Alle 2FA-Codes nach Raivo OTP ✅"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"bibliothek": {
|
||
"name": "Bibliothek-Pipeline",
|
||
"goal": "475 PDFs aus Nextcloud via /analyze-sources zu destillierten Markdown-Artikeln.",
|
||
"wipLimit": 2,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Pilot: E-Book mit analyze-sources verarbeiten"
|
||
},
|
||
{
|
||
"t": "Marker auf x86_64 Mac klären"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"aikb": {
|
||
"name": "AI Engineering KB",
|
||
"goal": "Wissens-Repo für AI Engineering nach LLM-Wiki-Pattern (Karpathy).",
|
||
"wipLimit": 2,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": [
|
||
{
|
||
"t": "Schema-Diff: source_type, author, year, isbn",
|
||
"note": "Frontmatter-Schema + Template dokumentiert"
|
||
}
|
||
]
|
||
}
|
||
]
|
||
},
|
||
"tiefgang": {
|
||
"name": "Tiefgang",
|
||
"goal": "",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "4 Songs mit KI-Tools mastern"
|
||
},
|
||
{
|
||
"t": "4 Songs in die Cloud hochladen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"mdimmusic": {
|
||
"name": "MDIM",
|
||
"goal": "mydrugismusic — Label & Artist-Kollektiv.",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"droii": {
|
||
"name": "DROII",
|
||
"goal": "",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"einzelunternehmer": {
|
||
"name": "Einzelunternehmer",
|
||
"goal": "Finanzen, Buchhaltung, Steuern, Verwaltung als Freelancer.",
|
||
"wipLimit": 3,
|
||
"throughput": 1,
|
||
"sle": {
|
||
"days": 30,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": [
|
||
{
|
||
"t": "Lexoffice: Stand prüfen"
|
||
}
|
||
]
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
},
|
||
"soloprojekt": {
|
||
"name": "Soloprojekt",
|
||
"goal": "",
|
||
"wipLimit": 3,
|
||
"throughput": 2,
|
||
"sle": {
|
||
"days": 14,
|
||
"p": 85
|
||
},
|
||
"cols": [
|
||
{
|
||
"id": "ready",
|
||
"label": "Ready",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "wip",
|
||
"label": "In Progress",
|
||
"tasks": []
|
||
},
|
||
{
|
||
"id": "done",
|
||
"label": "Done",
|
||
"tasks": []
|
||
}
|
||
]
|
||
}
|
||
},
|
||
"boardMeta": {
|
||
"ringsystem": {
|
||
"group": "Meta",
|
||
"color": "#7c6af7",
|
||
"ring": "0"
|
||
},
|
||
"kanban": {
|
||
"group": "Meta",
|
||
"color": "#c084fc",
|
||
"ring": "3"
|
||
},
|
||
"doener": {
|
||
"group": "Code",
|
||
"color": "#f87171",
|
||
"ring": "3"
|
||
},
|
||
"musichub": {
|
||
"group": "Code",
|
||
"color": "#c084fc",
|
||
"ring": "1w"
|
||
},
|
||
"openclaw": {
|
||
"group": "Code",
|
||
"color": "#60a5fa",
|
||
"ring": "1w"
|
||
},
|
||
"docpilot": {
|
||
"group": "Code",
|
||
"color": "#7c6af7",
|
||
"ring": "1w"
|
||
},
|
||
"k4": {
|
||
"group": "Beruflich",
|
||
"color": "#fbbf24",
|
||
"ring": "1w"
|
||
},
|
||
"branding": {
|
||
"group": "Beruflich",
|
||
"color": "#4ade80",
|
||
"ring": "1w"
|
||
},
|
||
"psk": {
|
||
"group": "Beruflich",
|
||
"color": "#4ade80",
|
||
"ring": "1w"
|
||
},
|
||
"eu": {
|
||
"group": "Beruflich",
|
||
"color": "#fbbf24",
|
||
"ring": "1w"
|
||
},
|
||
"pleasance": {
|
||
"group": "Web",
|
||
"color": "#f87171",
|
||
"ring": "3"
|
||
},
|
||
"mdim": {
|
||
"group": "Web",
|
||
"color": "#c084fc",
|
||
"ring": "3"
|
||
},
|
||
"privat": {
|
||
"group": "Privat",
|
||
"color": "#fb923c",
|
||
"ring": "1p"
|
||
},
|
||
"degoogle": {
|
||
"group": "Privat",
|
||
"color": "#60a5fa",
|
||
"ring": "1p"
|
||
},
|
||
"bibliothek": {
|
||
"group": "Privat",
|
||
"color": "#7c6af7",
|
||
"ring": "1p"
|
||
},
|
||
"aikb": {
|
||
"group": "Privat",
|
||
"color": "#4ade80",
|
||
"ring": "1w"
|
||
},
|
||
"tiefgang": {
|
||
"group": "Musik",
|
||
"color": "#2dd4bf",
|
||
"ring": "1p"
|
||
},
|
||
"mdimmusic": {
|
||
"group": "Musik",
|
||
"color": "#c084fc",
|
||
"ring": "1p"
|
||
},
|
||
"droii": {
|
||
"group": "Musik",
|
||
"color": "#f87171",
|
||
"ring": "1p"
|
||
},
|
||
"soloprojekt": {
|
||
"group": "Musik",
|
||
"color": "#fbbf24",
|
||
"ring": "1p"
|
||
},
|
||
"einzelunternehmer": {
|
||
"group": "Beruflich",
|
||
"color": "#4ade80",
|
||
"ring": "1p"
|
||
}
|
||
},
|
||
"groups": [
|
||
"Meta",
|
||
"Code",
|
||
"Beruflich",
|
||
"Web",
|
||
"Privat",
|
||
"Musik"
|
||
]
|
||
} |