diff --git a/README.md b/README.md index b91c792..97d41cd 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # task-master -Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Checklisten, Zeiterfassung und Reports. Gebaut mit [Bubble Tea](https://github.com/charmbracelet/bubbletea). +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) @@ -8,16 +8,29 @@ Offline-first Terminal-Taskmanager (`tm`) — Kanban-Board, Markdown-Tickets, Ch ## Features -- Projekte & Tickets lokal als JSON (kein Server) — Binary `tm` -- Web-Server `tm_server` mit eingebettetem Svelte-UI, SQLite, Auth und Rechte pro Projekt +**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 verwalten +- Timer, manuelle Zeitbuchungen, Zeiteinträge inkl. Start/Ende editieren - Report mit Group-by (Ticket / Tag) -- Undo / Redo über eine Command-History (TUI) -- Vim-Style Keybindings (TUI) +- Undo / Redo über eine Command-History +- Vim-Style Keybindings - YouTrack Pull/Push (manuell; Remote-URL, Token, Project-Key pro Projekt) -- Server: Sync-Backend pro Projekt, Projekt-Tokens für die TUI, Ticket-Revisionen +- 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 @@ -30,14 +43,15 @@ 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 holen -tm sync push # lokale Änderungen nach YouTrack +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 @@ -60,11 +74,12 @@ export TASK_MASTER_SECRET='long-random-secret' # verschlüsselt Remote-Tokens ./bin/tm_server import-json -owner admin ``` -UI: http://localhost:8080 — Dashboard, Board, Report, 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 werden für **Test** und **Website Relaunch** Write-Tokens erzeugt und unter `.dev-home` als lokale TUI-Projekte (`backend=taskmaster`) hinterlegt — danach `make run-dev` und Sync (Y → Pull). +UI: http://localhost:8080 — Dashboard, Board, Report, Attachments, Members, Settings (Tokens), Users (Admin), Ticket-Zeit & History. -Dev-Frontend (Vite, API-Proxy): `cd web && npm run dev` parallel zu `tm_server`. +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: @@ -76,10 +91,16 @@ 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 | +| 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) @@ -87,13 +108,12 @@ Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~ |---------|------------------------| | `j`/`k` | Navigieren | | `n` | Neues Ticket/Projekt | -| `e` | Ticket im Editor | +| `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack / Sync-Backend) | | `s` | Status ändern | | `l` | Board-Filter | | `/` | Suche | | `p`/`P` | Projekt / Ticket verschieben | -| `e` | Ticket bzw. Projekt editieren (in Projektliste: YouTrack) | -| `Y` | YouTrack-Menü: Pull / Push | +| `Y` | Sync-Menü: Pull / Push | | `t`/`T` | Timer / Zeit buchen | | `m` | Zeiteinträge | | `r` | Report | @@ -103,15 +123,15 @@ Daten landen standardmäßig unter `~/.local/share/task-master`, Config unter `~ Checklisten im Preview: `J`/`K` + `Space`. -### YouTrack +### YouTrack / Sync 1. `p` → Projekt wählen → `e` -2. Remote-URL, Permanent Token und Project-Key setzen (gespeichert in `projects//meta.json`, Mode `0600`) +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** (Issues + Work Items) oder **Push** (Tickets + Zeiteinträge) +4. `Y` → **Pull** oder **Push** CLI: `tm sync pull` / `tm sync push` -Zeit: lokale Einträge ohne `externalId` werden als YouTrack-Work-Items gepusht; remote Work Items landen lokal beim Pull. +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). @@ -120,9 +140,12 @@ Status-Mapping Richtung YouTrack: OPEN→`Open`, WIP→`In Progress`, DONE→`Fi ```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)):