- Collapsible hamburger sidebar on mobile
- Mobile header bar with menu toggle
- Thread list as overlay on mobile, sidebar on desktop
- Responsive padding and font sizes
- Task queue header responsive adjustments
- Single domain for hooks + WebSocket (path-based routing)
- No need for ws.hammer or hooks.hammer subdomains
- Caddy proxies everything to gateway on this VPS
- Add React Router with sidebar layout (DashboardLayout)
- Queue is now a routed page at /queue
- Chat placeholder page at /chat
- Admin page accessible from sidebar
- Dark sidebar with amber accent for active nav
- Updated CORS and auth to support dash.donovankelly.xyz
- Renamed to Hammer Dashboard
- EditableText now updates draft state instead of saving immediately
- Panel tracks dirty state across title, description, priority, source
- Save/Cancel bar slides up when any field is modified
- Cancel reverts all changes, Save commits them in one API call
- Slide-up animation for the save/cancel bar
- All logged-in users can create/edit/manage tasks (no bearer token needed)
- Added user role system (user/admin)
- Donovan's account auto-promoted to admin on startup
- Admin page: view users, change roles, delete users
- /api/me endpoint returns current user info + role
- /api/admin/* routes (admin-only)
- Removed bearer token UI from frontend
- Bearer token still works for API/bot access
- Click-to-edit title and description (inline editing)
- Clickable priority selector (toggle between critical/high/medium/low)
- Clickable source selector (toggle between all sources)
- Saving indicator
- EditableText component with Escape to cancel, Enter/blur to save
- Pass token and onTaskUpdated props from App
- Add serial task_number column to tasks table
- Display HQ-{number} on cards and detail panel
- API resolveTask() supports UUID, number, or HQ-N prefix
- GET /api/tasks/:id endpoint for single task lookup
- All PATCH/POST/DELETE endpoints resolve by number or UUID
- Add better-auth to backend and frontend
- Create auth tables (users, sessions, accounts, verifications)
- Mount BetterAuth handler on /api/auth/*
- Protect GET /api/tasks with session auth
- Add login page with email/password
- Add invite route for creating users
- Add logout button to header
- Cross-subdomain cookies for .donovankelly.xyz
- Fix page title to 'Hammer Queue'
- Keep bearer token for admin mutations (separate from session auth)
- Update docker-compose with BETTER_AUTH_SECRET and COOKIE_DOMAIN
- Backend: Elysia + Bun + Drizzle ORM + PostgreSQL
- Frontend: React + Vite + TypeScript + Tailwind CSS
- Task CRUD API with bearer token auth for writes
- Public read-only dashboard with auto-refresh
- Task states: active, queued, blocked, completed, cancelled
- Reorder support for queue management
- Progress notes per task
- Docker Compose for local dev and Dokploy deployment