diff --git a/skills/hammer-dashboard/SKILL.md b/skills/hammer-dashboard/SKILL.md new file mode 100644 index 0000000..c0170e5 --- /dev/null +++ b/skills/hammer-dashboard/SKILL.md @@ -0,0 +1,115 @@ +--- +name: hammer-dashboard +description: Manage tasks, projects, and progress in Hammer Dashboard (dash.donovankelly.xyz). Use when creating tasks, updating task status, adding progress notes, managing projects, assigning work, or checking what to work on. Also use for any task queue or project management operations. +--- + +# Hammer Dashboard + +Hammer Dashboard is the task management system at `dash.donovankelly.xyz`. All work is tracked here — tasks, projects, progress notes, assignments. + +## Rules + +1. **Every piece of work gets a task.** If Donovan asks for something, create a task. +2. **Update progress as you work.** Add progress notes via the API after each meaningful step. +3. **Keep projects documented.** Every project should have context (architecture, repos, credentials refs, decisions). +4. **Assign yourself** when starting work. Set `assigneeName: "Hammer"` and `assigneeId: "1HltUpL3R0qZkVxIu0oQ3UoqBCHuuMpV"`. +5. **Build and test before pushing.** Run `bun run build` or equivalent before git push. +6. **Deploy after pushing.** Trigger Dokploy deploy via API. +7. **Mark tasks done** when complete. Don't leave stale active tasks. + +## API Reference + +Base URL: `https://dash.donovankelly.xyz/api` +Auth: `Authorization: Bearer 62490648ae3f8712e2a30eb0ca46ac2f` + +### Tasks + +```bash +# List all tasks +GET /tasks + +# Get single task (by UUID, task number, or HQ-N) +GET /tasks/:id + +# Create task +POST /tasks +{ + "title": "string (required)", + "description": "string", + "source": "donovan|david|hammer|heartbeat|cron|other", + "priority": "critical|high|medium|low", + "status": "queued|active|blocked|completed|cancelled", + "projectId": "uuid", + "assigneeId": "string", + "assigneeName": "string", + "dueDate": "ISO datetime", + "estimatedHours": number, + "recurrence": { "frequency": "daily|weekly|biweekly|monthly", "autoActivate": bool } +} + +# Update task +PATCH /tasks/:id +# Same fields as create, all optional + +# Add progress note +POST /tasks/:id/notes +{ "note": "string" } + +# Manage subtasks +POST /tasks/:id/subtasks { "title": "string" } +PATCH /tasks/:id/subtasks/:subtaskId { "completed": bool } +DELETE /tasks/:id/subtasks/:subtaskId + +# Reorder queue +PATCH /tasks/reorder +{ "ids": ["uuid", ...] } +``` + +### Projects + +```bash +# List projects +GET /projects + +# Get project +GET /projects/:id + +# Create project +POST /projects +{ + "name": "string (required)", + "description": "string", + "context": "string (markdown — architecture, credentials refs, decisions)", + "repos": ["url", ...], + "links": ["url", ...] +} + +# Update project +PATCH /projects/:id +``` + +### Velocity Stats + +```bash +GET /tasks/stats/velocity +# Returns: daily completions (14d), this-week count, avg/week, estimated hours remaining +``` + +## Task Workflow + +1. **New request** → Create task with appropriate priority and project +2. **Starting work** → Set status `active`, assign to self, add progress note +3. **Making progress** → Add progress notes after each meaningful step +4. **Blocked** → Set status `blocked`, explain in progress note +5. **Done** → Set status `completed`, final progress note summarizing what shipped +6. **Recurring work** → Set recurrence field; system auto-spawns next instance on completion + +## Dokploy Deployment + +For dashboard changes only. See [references/dokploy.md](references/dokploy.md). + +## Key IDs + +- Hammer assigneeId: `1HltUpL3R0qZkVxIu0oQ3UoqBCHuuMpV` +- Dashboard Dokploy compose ID: `kBdwrcZodIRyNIvQ-wrzG` +- Task API bearer: `62490648ae3f8712e2a30eb0ca46ac2f` diff --git a/skills/hammer-dashboard/references/dokploy.md b/skills/hammer-dashboard/references/dokploy.md new file mode 100644 index 0000000..09eb71a --- /dev/null +++ b/skills/hammer-dashboard/references/dokploy.md @@ -0,0 +1,57 @@ +# Dokploy Deployment + +Hammer Dashboard is deployed via Docker Compose on Dokploy (cloud: app.dokploy.com). + +## Quick Deploy + +```bash +curl -s -X POST "https://app.dokploy.com/api/trpc/compose.deploy" \ + -H "x-api-key: cFnoojfvEdZXzDvJDGTtoyIcRVbMajtaWOhTrreWElZkIvtuFTJbMZXkzitmclal" \ + -H "Content-Type: application/json" \ + -d '{"json":{"composeId":"kBdwrcZodIRyNIvQ-wrzG"}}' +``` + +## Check Deploy Status + +```bash +curl -s "https://app.dokploy.com/api/trpc/deployment.allByCompose?input=%7B%22json%22%3A%7B%22composeId%22%3A%22kBdwrcZodIRyNIvQ-wrzG%22%7D%7D" \ + -H "x-api-key: cFnoojfvEdZXzDvJDGTtoyIcRVbMajtaWOhTrreWElZkIvtuFTJbMZXkzitmclal" +``` + +## Update Environment Variables + +```bash +curl -s -X POST "https://app.dokploy.com/api/trpc/compose.update" \ + -H "x-api-key: cFnoojfvEdZXzDvJDGTtoyIcRVbMajtaWOhTrreWElZkIvtuFTJbMZXkzitmclal" \ + -H "Content-Type: application/json" \ + -d '{"json":{"composeId":"kBdwrcZodIRyNIvQ-wrzG","env":"KEY=VALUE\nKEY2=VALUE2"}}' +``` + +## Update Compose File + +```bash +curl -s -X POST "https://app.dokploy.com/api/trpc/compose.update" \ + -H "x-api-key: cFnoojfvEdZXzDvJDGTtoyIcRVbMajtaWOhTrreWElZkIvtuFTJbMZXkzitmclal" \ + -H "Content-Type: application/json" \ + -d '{"json":{"composeId":"kBdwrcZodIRyNIvQ-wrzG","composeFile":"..."}}' +``` + +## Stack + +- **db**: Postgres 16 Alpine +- **backend**: Elysia + Bun + Drizzle ORM (builds from git.infra.nkode.tech/hammer/hammer-queue#main:backend) +- **frontend**: React + Vite + Tailwind (builds from same repo #main:frontend) +- Backend runs `db:push` on startup (auto-migrates schema changes) +- Domain: dash.donovankelly.xyz +- Git repo: https://git.infra.nkode.tech/hammer/hammer-queue.git + +## Environment Variables + +- `POSTGRES_USER`, `POSTGRES_PASSWORD`, `POSTGRES_DB` +- `API_BEARER_TOKEN` — bearer token for task API +- `BETTER_AUTH_SECRET`, `BETTER_AUTH_URL` — BetterAuth config +- `COOKIE_DOMAIN` — `.donovankelly.xyz` +- `CLAWDBOT_HOOK_URL` — webhook endpoint for task activation notifications +- `CLAWDBOT_HOOK_TOKEN` — gateway hook auth token +- `GATEWAY_WS_URL` — WebSocket relay to Clawdbot gateway +- `GATEWAY_WS_TOKEN` — gateway auth token