feat: add hammer-dashboard skill

API reference, task workflow, deployment docs, project management
rules. Ensures consistent task tracking and documentation.
This commit is contained in:
2026-01-29 14:19:16 +00:00
parent 5976fc8e4a
commit 287dbac2d7
2 changed files with 172 additions and 0 deletions

View File

@@ -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`

View File

@@ -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