bot-hermes
f1b38ac497
21: habit analytics - recharts line/bar chart for 30-day completions and top streaks
2026-07-29 19:26:06 +00:00
bot-hermes
7ced6f2bf2
feat: add undo toasts for task and note deletions
...
- Capture deleted item before DELETE call
- Show sonner toast with Undo action button
- On Undo, POST to recreate the item with original data
- Applied to tasks-list-view, task-detail-panel, and notes page
2026-07-29 19:26:05 +00:00
bot-hermes
1d8f548f4b
19: mobile responsive - reduce main content padding on mobile (p-4 md:p-6)
2026-07-29 19:25:50 +00:00
bot-hermes
d951348372
feat: add canvas freeform board page with drag-and-drop cards and sidebar link
2026-07-29 19:25:37 +00:00
bot-hermes
fb68009c23
feat: add pagination with Load More button to task list view
...
- Add offset/limit pagination with 50 items per page
- Load More button appends tasks to existing list
- Show "Showing X of Y" count in the filter bar area
2026-07-29 19:25:17 +00:00
bot-hermes
b314bda934
feat(tasks): add recurring task support with rrule in create dialog, detail panel, and complete route
2026-07-29 19:25:15 +00:00
bot-hermes
7ae8efe096
feat(kanban): dependency visual on cards with Link2 icon and tooltip
2026-07-29 19:24:23 +00:00
bot-hermes
1cb932f0f6
feat(tasks): filter/sort controls and bulk operations in list view
2026-07-29 19:24:18 +00:00
bot-hermes
6cbb3bb544
feat: add daily notes page with date navigation and sidebar link
2026-07-29 19:23:56 +00:00
bot-hermes
77a45715c0
feat(projects): add project edit dialog with dropdown menu and archive confirmation
2026-07-29 19:23:45 +00:00
bot-hermes
bfada34ead
feat: add time tracking UI with timer and clock icon on kanban cards
...
- Add time tracking section in task detail panel with progress bar
- Start/Stop timer with elapsed time display
- On stop, PATCH trackedMinutes with delta
- Add clock icon on kanban cards when estimatedMinutes is set
- Note: timer is per-tab (no persistence across refresh)
2026-07-29 19:22:36 +00:00
bot-hermes
a6ac7c3fb6
feat(habits): add habit edit dialog with dropdown menu and delete confirmation
2026-07-29 19:22:29 +00:00
bot-hermes
1a0704e0f2
feat(settings): add Tags management tab with create/edit/delete UI
2026-07-29 19:22:27 +00:00
bot-hermes
28d01f3839
feat(kanban): inline task creation in columns
2026-07-29 19:21:41 +00:00
bot-hermes
3708505b00
fix: remove completionMode/color/icon from habits route (not in schema)
2026-07-29 18:50:32 +00:00
bot-hermes
f5121f3b8d
fix: rewrite /api/tasks, /api/habits, /api/projects to use Drizzle ORM instead of PocketBase stub
2026-07-29 18:48:10 +00:00
bot-hermes
0de8f3837f
fix: restore domainId prop to TasksKanbanView and TasksListView
2026-07-29 15:26:02 +00:00
bot-hermes
bc27e3e4bc
fix: wrap tasks page in RealtimeProvider to prevent useRealtimeContext error
2026-07-29 15:23:54 +00:00
bot-hermes
dbce018ce5
fix: use sql tagged template for pg_notify instead of db.execute
2026-07-29 13:07:03 +00:00
bot-hermes
83befd6a84
fix: activity.ts pg_notify syntax and graph-service.ts sections empty inArray
2026-07-29 13:03:55 +00:00
bot-hermes
4089d7464c
fix: use whitelist sort columns in domains route to fix TypeScript error
2026-07-29 12:59:20 +00:00
bot-hermes
f5463f21b0
fix: rewrite /api/domains route to use Drizzle ORM instead of PocketBase stub
2026-07-29 12:57:06 +00:00
bot-hermes
700d1456ac
fix: remove .unref() from middleware setInterval (Edge Runtime incompatibility)
2026-07-29 12:47:39 +00:00
bot-hermes
ed3d3ae8d1
fix: rename [id] to [domainId] in domains API route to resolve Next.js param conflict
2026-07-29 12:44:41 +00:00
bot-hermes
326af9fd48
fix: rename [id] to [projectId] in projects API route to resolve Next.js param conflict
2026-07-29 12:39:08 +00:00
Hermes Coding Manager
813c97a016
chore(integration): fix lint warnings (react-hooks/exhaustive-deps, react/no-unescaped-entities, unused-vars)
...
Leftover lint cleanups to make 'npm run lint' pass on the integrated branch:
- calendar/page.tsx: add eslint-disable for mount-only useEffect blocks
- import/route.ts: replace destructure-and-ignore with renames (_id, _created, _updated)
- settings-agents.tsx: escape apostrophe in JSX text
2026-07-29 08:16:22 -04:00
Hermes Coding Manager
d7320be5e3
chore(integration): drop broken @project-e/cli, add eslint config
...
- Remove packages/cli (referenced dropped v1 'records' table, broken since 6c438ea )
- Remove packages/cli from root workspaces
- Add eslint + eslint-config-next to apps/web so 'npm run lint' runs
- Regenerate package-lock.json
This unblocks typecheck/build/lint for the v2 rewrite.
2026-07-29 08:09:59 -04:00
mbatchelder
e5b7d9e2ee
feat: Phase 6 - MCP + Webhooks + Worker + Polish
...
- MCP server: stateless JSON-RPC 2.0 with 18 tools (tasks, habits, projects, notes, domains, search, activity)
- Webhooks API: CRUD routes under /api/domains/[domainId]/webhooks/ with test endpoint and deliveries log
- Webhook delivery: HMAC-SHA256 signed POST with retry (exponential backoff, max 6)
- Worker rewrite: Drizzle ORM instead of PocketBase, polls jobs table, handles webhook_delivery, recurring_spawn, ai_dispatch
- Rate limiting: token bucket per IP/API key (100 req/min REST, 300 req/min MCP)
- Keyboard help overlay: ? opens Radix Dialog with search/filter, Esc closes
- AI @mention stub: @agent in command palette dispatches CustomEvent
- Mobile responsive: bottom nav, single-column kanban, day view calendar, 44px touch targets
- Accessibility: skip-to-content link, focus rings, aria-labels, color contrast
- E2E tests: mcp.spec.ts, webhooks.spec.ts, realtime.spec.ts added
- Schema: api_keys and webhook_deliveries tables with migration
- Removed old PocketBase-style database.ts from worker
2026-07-29 08:03:28 -04:00
mbatchelder
eba1d78fb9
feat: Phase 5 - Calendar + Dashboard + Search
...
Calendar:
- GET /api/domains/[domainId]/calendar/events?from=&to= — returns tasks, habits, projects, milestones
- PATCH /api/domains/[domainId]/tasks/[id]/schedule — drag-to-reschedule with activity feed
- Calendar UI with month/week/day views via react-big-calendar
- Drag-to-reschedule with SSE updates
- Filter by entity type and domain
- Keyboard shortcuts: t=today, m/w/d=view, ←/→=navigate
- Mobile: auto-switches to day view on small screens
Dashboard:
- GET/PUT /api/domains/[domainId]/dashboard — layout stored in domain custom_fields
- 8 per-widget data endpoints (today-tasks, habit-checklist, weekly-stats, project-progress, upcoming-calendar, recent-notes, activity-feed, quick-capture)
- react-grid-layout with responsive breakpoints (12/8/4 cols)
- Drag-to-reorder, resize, add/remove widgets
- Edit mode toggle, per-workspace layout persistence
- Widget error boundary
Search:
- tsvector columns + GIN indexes on tasks, notes, projects, habits, domains
- GET /api/search?q=&types=&domain= — ranked results with ts_headline snippets
- Dedicated search page with grouped results, filters, recent searches (localStorage)
- Empty state with hints
Schema:
- Added custom_fields jsonb column to domains table (migration 0002)
- Removed stale root app/ directory
Build: passes, typecheck: passes, tests: 18/18 wikilink-parser tests pass
2026-07-29 07:32:47 -04:00
mbatchelder
40a26d2672
feat: Phase 4 - Notes + Graph + Wikilinks
...
- Wikilink parser: [[Title]], [[Title|Display]], [[entity_type:Title]] patterns
- Notes REST API: CRUD under /api/domains/[domainId]/notes/ with wikilink sync
- Note link service: idempotent wikilink resolution, backlinks, outgoing links
- Notes list page: search, filter (all/pinned/archived), domain selector
- Note editor: TipTap with backlinks panel and outgoing links display
- Graph data API: /api/domains/[domainId]/graph and /api/graph
- Graph view page: D3 force-directed graph with entity type filters, search, zoom
- Keyboard shortcuts: g g → graph, c n → new note
- 18 passing wikilink parser tests
- All API routes follow AGENTS.md contract (activity + pg_notify)
2026-07-29 06:56:23 -04:00
mbatchelder
064a46f97d
feat: Phase 3 - Habits + Projects CRUD API, frontend, completions, sections
...
Habits REST API:
- GET/POST /api/domains/[domainId]/habits (list with filters, create)
- GET/PATCH/DELETE /api/domains/[domainId]/habits/[id] (detail, update, soft delete)
- POST /api/domains/[domainId]/habits/[id]/complete (completion + streak calc)
- GET /api/domains/[domainId]/habits/[id]/completions (list with date range)
- POST/DELETE /api/domains/[domainId]/habits/[id]/tags
Projects REST API:
- GET/POST /api/domains/[domainId]/projects (list with task counts, create)
- GET/PATCH/DELETE /api/domains/[domainId]/projects/[id] (detail with sections/tasks, update, soft delete)
Sections REST API:
- GET/POST /api/domains/[domainId]/projects/[projectId]/sections (list, create)
- GET/PATCH/DELETE /api/domains/[domainId]/projects/[projectId]/sections/[id]
Frontend:
- Habits page: checklist view, difficulty badges, streak display, filter
- Habit create dialog: name, description, frequency, difficulty, goal, unit, reminder, mood toggle
- Habit completion dialog: value, mood (1-5 emoji), notes
- Calendar heatmap: 365-day grid, color by value, hover tooltip
- Projects page: grid of cards with progress bars, status badges, tags
- Project detail page: sections board, drag tasks between sections
- Project create dialog: name, description, status, color picker, target date
- Section dialog: name, kind (section/milestone), status, target date
Keyboard shortcuts: c h (new habit), c p (new project), c s (new section)
All write routes follow AGENTS.md contract (Drizzle + recordActivity + pg_notify).
Build, typecheck, and 15 new tests pass.
2026-07-29 06:37:37 -04:00
mbatchelder
1fcd12fc14
fix: exclude __tests__ from typecheck to avoid jest/next types conflict
2026-07-29 06:18:05 -04:00
mbatchelder
d7762143bb
test: add Vitest API tests for tasks routes
...
- Tests for GET, POST, PATCH, DELETE task routes
- Tests for dependency cycle detection
- Jest config with SWC transform and module aliases
2026-07-29 06:14:44 -04:00
mbatchelder
b6e2ab415e
feat: Phase 2 - Tasks CRUD API, kanban/list UI, dialogs, activity feed, keyboard shortcuts
...
- Tasks REST API under /api/domains/[domainId]/tasks/ with full CRUD, filtering, pagination
- Complete/uncomplete endpoints
- Bulk update endpoint for drag-to-reorder
- Dependencies API with cycle detection
- Tags API for task tagging
- Activity feed API scoped to workspace
- Updated kanban board view with 4 columns (todo/in_progress/done/cancelled)
- Updated list view with status column and workspace-scoped API calls
- Task create dialog with title, description, status, priority, due date, estimate
- Task detail panel (sheet) with full edit capabilities
- Task activity feed widget
- Keyboard shortcuts: c t (new task), e (edit), d (delete), Space (open), Esc (close), 1-4 (filter)
- All routes follow AGENTS.md contract: Drizzle writes + activity feed + pg_notify
2026-07-29 06:12:35 -04:00
mbatchelder
b3ff23a5f0
feat: Phase 1 foundation - schema, auth, realtime, shell
...
- Rewrote Drizzle schema: 20 tables with enums, relations, indexes
- Generated migration with DROP TABLE records (v1 EAV removal)
- Added passkey auth routes (register/login)
- Added requireWorkspaceAccess helper
- Added seedDefaultData for Personal workspace + welcome note
- Updated SSE endpoint for v2 entities + workspace_id filtering
- Created recordActivity helper (insert + pg_notify)
- Updated sidebar: Graph replaces Reports, removed Analytics
- Updated command palette for v2 entities
- Created AGENTS.md with locked contract
- Created llm-wiki scaffold (5 stubs)
- Added inline AGENT INSTRUCTION comments to all 50 API route files
- Fixed globals.css border-border class conflict
- Updated database.ts stub for v1 compatibility
2026-07-29 05:53:13 -04:00
bot-hermes
e21028a64c
fix: search route - in-process substring match for cross-entity search
2026-07-28 21:54:50 +00:00
bot-hermes
9ddab4e5a5
fix: round 3 UI gaps - habit edit dialog, domain edit, empty states, domain name resolution
2026-07-28 15:02:01 +00:00
bot-hermes
a06d34264d
fix: compute project progress, task_count, completed_count in detail API
2026-07-28 14:41:07 +00:00
bot-hermes
945dd8904a
fix: allow null due_date in task schema for PATCH updates
2026-07-28 14:20:03 +00:00
bot-hermes
b76ba9f5c0
fix: notes page default domain should be empty (fetched from API)
2026-07-28 13:57:20 +00:00
bot-hermes
80834ef121
fix: notes page fetches domains on mount for domain name resolution
2026-07-28 13:54:18 +00:00
bot-hermes
640994c9c1
fix: projects page re-fetches on refreshKey change
2026-07-28 13:45:55 +00:00
bot-hermes
b45248be87
fix: resolve domain UUIDs in tasks list view
2026-07-26 01:26:37 +00:00
bot-hermes
af7d05be0f
fix: 7 UX bugs across dashboard, tasks, projects, calendar, settings
...
- Dashboard: fetch project progress from /api/projects/[id]/progress
- Tasks List: add DropdownMenuTrigger to More options button
- Projects: add New project button with CreateItemDialog integration
- Settings: use color picker value when creating domains
- Calendar: use dynamic domain options instead of hardcoded list
- Dashboard: make View all button navigate to /tasks
- Dashboard: domain names already resolved via domainMap (verified working)
2026-07-26 01:22:41 +00:00
bot-hermes
953a947874
fix: resolve 15+ UX issues across the full app
...
- CreateItemDialog: shared Zustand store for dialog state
- TopBar: use store instead of router.push navigation
- TaskDetailPanel: dynamic domain fetch from /api/domains
- TodayTasksWidget: domain name resolution from UUIDs
- ProjectProgressWidget: fetch real progress, default to 0
- Calendar page: domain filter fetches from API dynamically
- Habits page: edit/delete dropdown with AlertDialog
- Projects page: domain name display + delete button
- Notes page: domain picker on creation, names in list
- Settings domains: add color picker input
- Tasks list view: MoreHorizontal wired to edit/delete
- HabitCard: domain resolution + edit/delete dropdown
- PocketBase compat: add JSDoc migration comment
2026-07-25 02:22:01 +00:00
mbatchelder
73335484f8
feat: migrate from PocketBase to PostgreSQL with Drizzle ORM
...
- Add @project-e/db package with Drizzle schema and migrations
- Replace PocketBase client with PostgreSQL-based database client
- Migrate auth from custom to NextAuth.js
- Add Docker Compose with PostgreSQL container
- Update worker to use new database client
- Remove PocketBase-specific files and migrations
- Add drizzle config and initial migration
2026-07-24 07:08:29 -04:00
bot-hermes
a21c1606c9
fix: calendar filter, habit service, PB 0.25 field compat
...
- Calendar: remove unsupported due_date!="" filter (PB 0.25 rejects), fetch all + filter client-side
- habit-service: fix active=true filter to archived!=true (field doesnt exist)
- habit-service: remove references to non-existent fields (completed, skipped, score_config, start_date)
- All PocketBase collections: re-added proper data fields with correct PB IDs for relations
Fixes calendar, analytics, habits heatmap, and habits streaks endpoints.
2026-07-19 23:39:20 +00:00
bot-hermes
327c5bf733
fix: handle empty filter param and add created/updated fields for PB 0.25 compat
2026-07-19 15:03:15 +00:00
bot-hermes
a45a2a0bb2
fix: add apps/web/public/.gitkeep for Docker build
2026-07-19 00:10:16 +00:00
bot-hermes
301f4ea5ce
fix: resolve Zod v4 record type error and worker TypeScript compilation
...
- packages/shared/src/schemas/agent.ts: z.record(z.unknown()) → z.record(z.string(), z.unknown())
- Dockerfile.worker: add TypeScript compilation support (tsx)
Fixes #build-web and #build-worker container failures.
2026-07-19 00:03:43 +00:00