# task-master Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit [Bubble Tea](https://github.com/charmbracelet/bubbletea). Dazu der optionale Web-Server `tm_server` mit Svelte-UI und SQLite. ![Demo](demo.gif) > Demo wird aus [`demo.tape`](demo.tape) erzeugt (`make demo`). Ohne GIF lokal: siehe [Demo aufnehmen](#demo-aufnehmen). ## Features **TUI (`tm`)** - Projekte & Tickets lokal als JSON (kein Server) - Board-Filter: All / Backlog / In Progress / Done - Tickets in `$EDITOR` bearbeiten (Markdown + Checklisten) - Timer, manuelle Zeitbuchungen, Zeiteinträge inkl. Start/Ende editieren - Report mit Group-by (Ticket / Tag) - Undo / Redo über eine Command-History - Vim-Style Keybindings - YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt) - Sync gegen `tm_server` (Backend `taskmaster`, Projekt-Tokens) **Web (`tm_server`)** - Eingebettetes Svelte-UI, SQLite, Auth und Rechte pro Projekt - Projektgruppen, Sidebar-Navigation, Hash-Routes - Drag & Drop auf dem Board (OPEN / WIP / DONE) - Lesbare Ticket-Keys aus Projektcode + Sequenz (z. B. `WEB-12`) - Visual- und Markdown-Editor für Ticket-Beschreibungen - Datei-Anhänge; Tabellen (XLSX/ODS/…) im Browser editierbar - Report mit Datums- und Ticket-Filtern sowie Eintragsliste - Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen - Members, Settings (Tokens), Users (Admin) ## Install Voraussetzung: Go (siehe `go.mod`). Für `tm_server` zusätzlich Node.js (Frontend-Build). ```bash git clone git@git.aloxdrim.de:skruecken/task-master.git cd task-master make install # → $(go env GOPATH)/bin/tm # oder nur bauen: make build # → ./bin/tm make build-server # Frontend + → ./bin/tm_server make build-all # beides ``` ## Nutzung ```bash tm # TUI starten tm sync pull # Issues von YouTrack / tm_server holen tm sync push # lokale Änderungen pushen tm sync pull -p inbox # anderes Projekt tm version # Build-Version (Git-Hash) tm help ``` ### Web-Server (`tm_server`) ```bash # Dev/Test gegen lokales tm_server (kein YouTrack): seedet Projekte + verdrahtet TUI make run-server-dev # :8080, Data unter ./.dev-home, Login admin/admin make run-dev # TUI: Projekte „Test“ + „Website Relaunch“ schon mit Token connected # Produktion / manuell: export TM_ADMIN_USER=admin export TM_ADMIN_PASSWORD='change-me' export TASK_MASTER_SECRET='long-random-secret' # verschlüsselt Remote-Tokens ./bin/tm_server -listen :8080 # JSON-Daten der TUI einmalig importieren: ./bin/tm_server import-json -owner admin ``` UI: http://localhost:8080 — Dashboard, Board, Report, Attachments, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History. Das Test-Environment (`run-server-dev`) spricht nur mit diesem Backend; YouTrack ist dort nicht verdrahtet. Beim Seed (`TM_SEED_DEMO=1`) werden Demo-Projekte angelegt und für **Test** sowie **Website Relaunch** Write-Tokens unter `.dev-home` als lokale TUI-Projekte (`backend=taskmaster`) hinterlegt — danach `make run-dev` und Sync (`Y` → Pull). Login: `admin`/`admin` (Member: `alice`/`alice`). Dev-Frontend (Vite, API-Proxy): `cd web && npm run dev` parallel zu `tm_server`. Frontend neu bauen ohne Go-Rebuild: `make web-build`. Sandbox ohne echte Config/Daten: ```bash make run-dev # nutzt ./.dev-home # oder: TASK_MASTER_HOME=/tmp/tm-sandbox tm ``` Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~/.config/task-master`. | Variable | Wirkung | |------------------------|---------------------------------------------------| | `TASK_MASTER_HOME` | Basis für Config + Daten (Dev/Demo) | | `TASK_MASTER_DATA_DIR` | Nur Datenverzeichnis überschreiben | | `TASK_MASTER_SECRET` | Verschlüsselt Remote-Tokens in SQLite | | `TM_ADMIN_USER` / `TM_ADMIN_PASSWORD` | Bootstrap des ersten Admins | | `TM_SEED_DEMO=1` | Demo-Projekte + TUI-Verdrahtung (Test / Website Relaunch) | | `TM_SEED_BASE_URL` | Basis-URL in den geseedeten TUI-`meta.json` | Server-Flags: `-listen`, `-db`, `-secure` (siehe `tm_server help`). ## Keybindings (Auszug) | Taste | Aktion | |---------|------------------------| | `j`/`k` | Navigieren | | `n` | Neues Ticket/Projekt | | `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack / Sync-Backend) | | `s` | Status ändern | | `l` | Board-Filter | | `/` | Suche | | `p`/`P` | Projekt / Ticket verschieben | | `Y` | Sync-Menü: Pull / Push | | `t`/`T` | Timer / Zeit buchen | | `m` | Zeiteinträge | | `r` | Report | | `x`/`X` | Löschen / Force-Delete | | `u`/`U` | Undo / Redo | | `q` | Beenden | Checklisten im Preview: `J`/`K` + `Space`. ### YouTrack / Sync 1. `p` → Projekt wählen → `e` 2. Backend wählen: YouTrack (Remote-URL, Permanent Token, Project-Key) oder task-master (Server-URL + Projekt-Token) 3. Lokal arbeiten (Anlegen/Edit/Status bleiben lokal) 4. `Y` → **Pull** oder **Push** CLI: `tm sync pull` / `tm sync push` Zeit: lokale Einträge ohne `externalId` werden remote als Work-Items gepusht; remote Work Items landen lokal beim Pull. Status-Mapping Richtung YouTrack: OPEN→`Open`, WIP→`In Progress`, DONE→`Fixed` (Workflow-Namen können projektspezifisch abweichen). ## Entwicklung ```bash make test make build make build-server # braucht Node (npm ci + Vite-Build) make version ``` CI (Gitea): Tests, `tm` + `tm_server`-Build, Demo-GIF als Artifact. ## Demo aufnehmen Die Walkthrough-Aufnahme steckt in [`demo.tape`](demo.tape) ([VHS](https://github.com/charmbracelet/vhs)): ```bash # einmalig: vhs + ttyd/ffmpeg (siehe VHS-Docs) make demo # schreibt demo.gif (+ demo.mp4) ``` Die Pipeline erzeugt das GIF ebenfalls und lädt es als Artifact hoch. ## Lizenz Privat / eigener Use — siehe Repository-Einstellungen auf Gitea.