Commit Graph
100 Commits
Author SHA1 Message Date
bot-hermes c6328c120a feat: implement PL-7, PL-8, PL-9 — state-driven board, module/cycle views, link panels + graph edges
PL-7 — Task Board Columns from States:
- Add State, Module, Cycle, Link TypeScript types to types/index.ts
- Add stateId, moduleId, cycleId, trackedMinutes to Task type
- Rewrite tasks.tsx: fetch states from API, render 5 state-group columns
  (backlog/unstarted/started/completed/cancelled), drag-and-drop updates
  stateId via PATCH /tasks/:id, colored state badges, state filter dropdown,
  project filter
- Fix deprecated POST /tasks/:id/status → PATCH /tasks/:id with stateId
- Update tasks/.tsx: state selector dropdown replaces hardcoded status enum,
  toggle complete uses state-based approach, dependencies replaced with
  link-based UI using /api/links

PL-8 — Module + Cycle Views:
- Create apps/api/src/routes/cycles.ts: full CRUD + task assignment/removal
- Create apps/api/src/routes/links.ts: list/create/delete links between entities
- Register cycleRoutes and linkRoutes in API index
- Add Modules tab to project detail: list modules, expand to show tasks,
  add/remove tasks from modules, create/edit/delete module dialogs
- Add Cycles tab to project detail: sprint board grid, backlog lane,
  manual task transfer between cycles and backlog, create/edit cycle dialogs
- Fix ProjectTasks toggle to use PATCH with stateId instead of deprecated endpoint

PL-9 — Link Panels + Graph:
- Update graph API to read links bidirectionally (source OR target)
- Add link type color map (LINK_TYPE_COLORS) for edge rendering
- Graph edges now colored by linkType (blocks=red, relates=gray, etc.)
- Filter panel shows link types with color indicators
- Task detail Dependencies tab now uses /api/links for add/remove links
- Added link type selector (blocks/relates/parent-child/created-from)
2026-09-07 20:24:54 +00:00
bot-hermes 14bb1aa1a8 Merge pull request 'fix: resolve circular type inference in _app/index.tsx route' (#20) from feat/pl-1-typecheck into feat/plane-lift-schema 2026-09-07 15:43:08 -04:00
bot-hermes 43d3daac47 fix: resolve circular type inference in _app/index.tsx route
The dashboard route imported Route from '../_app', which resolves to itself
(_app/index.tsx IS the _app route), creating a self-referencing circular
type inference (TS7022/TS7023).

Fix by importing the root route from '__root' as the parent, which is the
correct ancestor in the route tree hierarchy.
2026-09-07 19:39:44 +00:00
bot-hermes a24bd34cb3 Merge pull request 'feat: states API route with project-scoped workflow states' (#19) from feat/pl-1-states into feat/plane-lift-schema 2026-09-07 15:30:07 -04:00
bot-hermes fdc510bfbd Merge remote-tracking branch 'origin/feat/plane-lift-schema' into feat/pl-1-states
# Conflicts:
#	apps/api/src/index.ts
2026-09-07 19:29:58 +00:00
bot-hermes 1f67a21bcc Merge pull request 'feat: modules API + membership' (#18) from feat/modules-api into feat/plane-lift-schema 2026-09-07 15:24:47 -04:00
bot-hermes c5682765e8 feat: add states CRUD API route with project-scoped workflow states
- Add states.ts with GET/POST/PATCH/DELETE endpoints
- States scoped to project via projectId FK; workspace access resolved through project
- stateGroupEnum enforced (backlog|unstarted|started|completed|cancelled)
- List ordered by sortOrder, auto-increment on create
- Soft-delete via deletedAt column (added to schema)
- 3-step contract on every write: DB write, activity feed, pg_notify
- Register /api/states route in main index.ts
- Default state seeding already present in projects.ts
2026-09-07 19:24:24 +00:00
bot-hermes 75bcd14233 feat: modules API + membership 2026-09-07 18:52:45 +00:00
bot-hermes 583c476e12 Merge pull request 'feat: tasks route stateId/stateGroup rewrite' (#17) from feat/tasks-route into feat/plane-lift-schema 2026-09-07 14:51:07 -04:00
bot-hermes 60fb37c4a3 feat: tasks route stateId/stateGroup rewrite
Replace flat status enum with stateId/stateGroup references:
- Import states table; add state_group filter via EXISTS subquery
- Add module_id and cycle_id filter params to task list endpoint
- Validate stateId on create/update (404 if state not found)
- Auto-set completedAt when state group is 'completed', clear otherwise
- Zero references to old taskStatusEnum remain
2026-09-07 18:37:12 +00:00
bot-hermes 28b2cbd095 fix: restore __root.tsx route (accidentally deleted in 2175c24, breaks web build) 2026-09-07 17:35:02 +00:00
bot-hermes 639306a26f feat: plane-lift schema (states/modules/cycles/links)
Phase 1 of the Plane feature lift into Project E.

Schema changes:
- Add stateGroupEnum, moduleStatusEnum, linkTypeEnum
- Add states table (per-project workflow states with group enum)
- Add modules table (project-scoped planning buckets)
- Add cycles table (time-boxed sprints)
- Add links table (canonical cross-entity mesh)
- Drop taskStatusEnum and tasks.status column
- Add stateId, moduleId, cycleId FKs to tasks
- Drop taskDependencies, noteLinks, noteEntityLinks tables

Project creation bootstrap:
- Seed 5 default states (Backlog/Todo/In Progress/Done/Cancelled) on new project

Minimal API fixes for typecheck:
- Remove references to dropped tables/columns
- Replace status-based queries with completedAt checks
- Stub deprecated dependency/status endpoints for Phase 2

Drizzle migration: 0008_plane-lift-schema.sql (custom, big-bang)
2026-09-07 17:02:04 +00:00
bot-hermes 264f65955b docs: polish README intro for public release 2026-09-05 21:50:48 +00:00
bot-hermes 6c67b1e6ef chore: public polish — remove stray fix scripts, move internal docs, add LICENSE 2026-09-05 21:47:58 +00:00
bot-hermes 2175c246e3 chore: remove unused route files and fix script permissions 2026-08-27 16:35:05 +00:00
bot-hermes ffc50091b1 refactor: remove canvas, automations, and custom statuses; simplify notification and status model 2026-08-22 18:00:41 +00:00
bot-hermes 7b2cdc3bae fix: remove accidentally committed node_modules symlinks from git
The worktree session created node_modules symlinks that were staged with
git add -A. These broke the deploy script which uses cp -r and cannot
overwrite directories with symlinks.
2026-08-19 11:01:42 +00:00
bot-hermes b814a4788d feat: add 5 PM features — custom statuses, Gantt, quick-add, automations, notifications
- Custom workflow statuses: per-project configurable status definitions
  replacing the fixed task_status enum. Each project defines its own
  workflow with drag-to-reorder, color coding, and category mapping.
- Gantt/timeline view: full project roadmap with task bars, dependency
  arrows, milestone diamonds, zoom levels (day/week/month), and drag
  to reschedule.
- Natural-language quick-add: NLP parser extracts dates, priorities,
  projects, labels, and recurrence from free text. Floating bar with
  'n' shortcut and live parsed preview.
- Automation rules: no-code trigger-action system per project. Triggers
  on status change, task creation, due date approaching. Actions set
  status/priority, add labels, create notifications.
- Notification center: in-app bell icon with unread badge, slide-out
  panel, real-time SSE updates, mark read/all read. Replaces raw
  activity feed dropdown.

Schema: adds status_definitions, automation_rules, notifications tables.
Migrations: 0007, 0008, 0009. 41 NLP parser tests pass.
2026-08-19 10:54:29 +00:00
bot-hermes 1a620f16c1 fix(graph): track node positions in real-time via nodeCanvasObject instead of stale snapshot 2026-08-18 11:08:54 +00:00
bot-hermes a3e4d3c868 feat: add threaded comments, activity feeds, and task dependencies 2026-08-10 21:59:10 +00:00
bot-hermes 1059512888 feat: add server error logging and tighten workspace isolation 2026-08-10 12:41:46 +00:00
bot-hermes d441e3862d docs(deploy): add one-time Gitea Actions runner setup steps
The CI workflow (projecte-runner) was never registered on the Gitea
instance, leaving quality/e2e/deploy/smoke jobs stuck at 'Waiting to run'.
Document the act_runner install/register/start flow so the pipeline can be
unblocked from the deploy host.
2026-08-10 09:13:00 +00:00
bot-hermes a60b75f075 feat: full plan execution - CI/CD, critical fixes, UX polish, secondary/advanced features, E2E + docs
Phase 0 (CI/CD): fix root typecheck to cover api+worker+web; reconcile migration
story into idempotent db:migrate (db:sync + db:triggers); add Gitea Actions
quality/deploy/smoke workflow; rewrite README/AGENTS/DEPLOY docs; add
requireWorkspaceAccess + recordActivityForEntity conventions.

Phase 1 (critical fixes): calendar delete + drag/resize DnD; canvas card CRUD +
bulk save + debounced autosave; logout route; graph edge workspaceId derivation;
real analytics endpoints (drop Math.random); task board droppable columns +
reorder persistence; Tiptap notes editor with sanitized HTML rendering; remove
insecure passkey auth; domain/owner scoping (IDOR) on all by-ID routes + search/
export/realtime scoping; command palette routing + agent mention fetch; agent
activity SSE handler; graph fly-to with tracked positions.

Phase 2 (UX polish): login on design system; Sonner toasts app-wide; shared
Loading/Empty/Error state components; working density/sidebarPos/reduce-motion
settings; Inter typography; consolidated status-colors lib; unified detail
routes; dashboard sort/realtime/responsive fixes; mobile responsive; a11y
(radiogroups, sanitized snippets, badge labels).

Phase 3 (features): daily notes timezone fix + delete + autosave + mood/energy
create; active-domain store + topbar picker; graph domain picker + navigable
entity links; tag assign/remove UI + server-side tag filter; real CSV export +
import validation; custom fields on tasks.

Phase 4 (advanced): migrate job worker into apps/worker (webhook delivery with
HMAC, recurring spawn, ai_dispatch disabled); webhook queue helper + entity
event enqueuing + test endpoint fix; recurring scheduledJobs pipeline; agents
CRUD + permission editing + activity filters; real notifications feed; MCP
polish (validation, error codes, domain scoping, dead sql leftover).

Phase 5 (E2E + docs): rewrite Playwright suite for the Vite SPA (15 specs, new
auth helpers, chromium-only in CI); add ephemeral-Postgres e2e CI job; rewrite
docs/API.md for the real Hono API.
2026-08-10 08:53:18 +00:00
Hermes 6cb4b9f1b5 Merge fix/theme-settings-refactor: ACCENT_PALETTE source of truth + rose accent 2026-08-09 23:33:24 +00:00
Hermes 0830489a02 Merge redesign/ui-v2 into main: full v2 rewrite (Vite SPA + Hono API + Bun worker)
Resolved conflicts in web-legacy pages and report schema by taking v2 side.
v2 is the deployed, current architecture; v1 paths preserved under apps/web-legacy.
2026-08-09 23:32:14 +00:00
Hermes 58586a6ad9 feat: theme settings refactor - ACCENT_PALETTE source of truth + rose accent
- Add rose accent to ACCENT_PALETTE
- Settings AppearanceTab derives ACCENT_COLORS from ACCENT_PALETTE
- Wire accent state through useThemeStore instead of localStorage
2026-08-09 23:29:21 +00:00
bot-hermes fe4402c7b0 Merge pull request 'Bug sweep fixes: 6 logic bugs across tasks/habits, graph/reports, worker (R2 pipeline test)' (#13) from integration/sweep-fixes into main 2026-08-06 10:02:34 -04:00
bot-hermes f985eaedbf Merge remote-tracking branch 'origin/wt/sweep-C' into integration/sweep-fixes 2026-08-06 13:57:53 +00:00
bot-hermes d92311da6a Merge remote-tracking branch 'origin/wt/sweep-B' into integration/sweep-fixes 2026-08-06 13:57:53 +00:00
bot-hermes ca7a0d7ff7 fix(reports): honor passed token in report-service generate* helpers
The generateWeeklySummary/generateProjectHealth/generateHabitAnalysis/
generateTimeAudit helpers all had "const pb = token ? createAdminClient()
: createAdminClient();" — both branches return the admin client, so a
passed user token was silently discarded and every caller got admin-level
access. Use createPocketBaseClient(token) when a token is provided,
matching the sibling project-service.ts / note-service.ts pattern.
2026-08-06 13:56:29 +00:00
bot-hermes ab7735d6fc fix(graph): filter soft-deleted projects in getGraphData
projectIds query omitted isNull(projects.deletedAt), unlike the sibling
projectRows query, so sections of soft-deleted projects were loaded as
orphan nodes via inArray(sections.projectId, projectIds).
2026-08-06 13:56:22 +00:00
bot-hermes 2dec21d886 fix(tasks,habits): replace dead PocketBase stubs with Drizzle ORM + soft-delete + activity feed
GET/PATCH/DELETE for single task and habit used createPocketBaseClient(),
which is a dead stub, and DELETE did a hard delete violating the soft-delete
rule in AGENTS.md. Rewrite with Drizzle ORM: soft-delete (deleted_at),
activity feed insert via recordActivity(), Zod validation, parent-task
existence check, workspace access check, and 404 NOT_FOUND handling.
2026-08-06 13:53:33 +00:00
bot-hermes 2bb28fe65f fix(tasks): support status query param in list API and use it in today-tasks widget
The dashboard widget was filtering with a broken filter=status!=done query
param that the list API never interpreted, so completed tasks could appear.
Add a status= todo,in_progress filter to GET /api/tasks and update the widget
to use it (also fix domain badge to use domainId).
2026-08-06 13:53:29 +00:00
bot-hermes 29ff83cfd6 fix(worker): honor jobs.maxAttempts and treat NULL nextRetryAt as due 2026-08-06 13:47:19 +00:00
Hermes affdf1661d fix: map Drizzle camelCase fields to frontend snake_case fields in reports API 2026-08-02 02:26:36 +00:00
Hermes 7297b7075e fix: reports API - add DB table, rewrite routes with Drizzle, fix TipTap type errors
Added reports table to PostgreSQL and Drizzle schema. Rewrote reports API routes to use Drizzle ORM instead of PocketBase stub. Fixed shared schema to match frontend field names. Fixed TipTap v3 type errors in note-editor.tsx and report-editor.tsx (StarterKit cast+chain as any).
2026-08-02 02:22:31 +00:00
Hermes 0df6d1c1c8 feat: add Edit/Delete dropdown menus to habits, projects, and sections
- Habits page: Add DropdownMenu with Edit/Delete options, Edit dialog
  (name/description/frequency/difficulty), Delete confirmation
- Projects page: Add DropdownMenu with Edit/Delete options, Edit dialog
  (name/description/status), Delete confirmation
- Project detail page: Add DropdownMenu with Edit/Delete per section,
  Edit Section dialog (name/kind/status), Delete confirmation
2026-08-02 01:25:14 +00:00
Hermes 2b4b6f4165 fix: stabilize NoteEditor/NoteEditorPane memoization with useCallback
Root cause: inline arrow functions for onDelete and onSave props created new references every render, breaking React.memo and causing editor re-renders that steal focus.
2026-08-01 23:02:46 +00:00
Hermes ac92284edd fix: remove queryClient.invalidateQueries from title save to prevent parent re-render focus stealing 2026-08-01 13:27:08 +00:00
Hermes aa5da5d770 fix: restore selectedNoteId as state for re-render 2026-08-01 13:23:35 +00:00
Hermes 58e563f21d fix: remove selectedNoteId state entirely to prevent parent re-render focus stealing 2026-08-01 13:22:23 +00:00
Hermes a673d77d58 fix: prevent search input from receiving focus via onMouseDown preventDefault 2026-08-01 13:21:14 +00:00
Hermes dfaf0ff659 fix: add onMouseDown stopPropagation to title input 2026-08-01 13:19:30 +00:00
Hermes 2cf6638d9e fix: isolate note editor in memoized pane to prevent focus stealing on parent re-render 2026-08-01 13:18:08 +00:00
Hermes 456d637a24 fix: isolate note editor in memoized pane to prevent focus stealing on parent re-render 2026-08-01 13:16:05 +00:00
Hermes d9000c9f76 fix: restore selectedNoteId as state for re-render, keep ref for content 2026-08-01 13:11:31 +00:00
Hermes 7776668269 fix: remove all state changes on note selection to prevent focus stealing 2026-08-01 13:09:35 +00:00
Hermes 4a83ee88ba fix: add autoFocus to title input to reclaim focus after re-render 2026-08-01 13:09:25 +00:00
Hermes 82db10a10d fix: add tabIndex=-1 to search input to prevent auto-focus stealing from title input 2026-08-01 13:07:45 +00:00
Hermes d0d6002126 fix: use ref-based selectedNote to prevent re-render focus stealing 2026-08-01 13:07:20 +00:00
Hermes eeff700875 fix: TipTap focus leak - use uncontrolled NoteTitleInput with ref to prevent focus stealing on parent re-render 2026-08-01 13:05:31 +00:00
Hermes 3f1a1982ca fix: use uncontrolled inputs for note title and editor to prevent focus leak to search field 2026-08-01 13:04:24 +00:00
Hermes 420ebfe24a fix: isolate note title in memoized component, prevent search input stealing focus 2026-08-01 13:02:55 +00:00
Hermes 9b0c1fb447 fix: use onBlur for NoteEditor save instead of onInput to prevent focus stealing 2026-08-01 13:00:28 +00:00
Hermes a65b828c78 fix: isolate note title in memoized component to prevent focus leak to search field 2026-08-01 13:00:22 +00:00
Hermes 21efa311da fix: prevent NoteEditor re-render stealing focus - use key remount, onBlur save, stable ref 2026-08-01 12:58:46 +00:00
Hermes 8917f3ad19 fix: add missing quotes around className in NoteTitleInput 2026-08-01 12:58:34 +00:00
Hermes ec0fb10b3e fix: add missing quotes around className in NoteTitleInput 2026-08-01 12:57:53 +00:00
Hermes c35ea2b175 fix: isolate note title input in memoized component to prevent focus leak to search field 2026-08-01 12:57:32 +00:00
Hermes ee57195681 fix: stabilize handleContentChange callback via ref to prevent NoteEditor re-render stealing focus 2026-08-01 12:53:19 +00:00
Hermes 445f5e1257 fix: use uncontrolled input for note title to prevent focus leak to search field 2026-08-01 12:51:50 +00:00
Hermes ff2611ce18 fix: save note title on blur instead of every keystroke to prevent focus leak 2026-08-01 12:50:16 +00:00
Hermes 67214575fb fix: debounce note title save to prevent focus leak to search field 2026-08-01 12:49:27 +00:00
Hermes 35d063ea82 fix: R3 bugs - TipTap focus leak to search, Quick Captured opens palette, Calendar day view switching 2026-08-01 12:46:41 +00:00
Hermes 085f552c4b fix: calendar day view - separate Calendar instances per view to avoid react-big-calendar view switching bug 2026-08-01 12:40:23 +00:00
Hermes 6613ff058e fix: calendar day view - wrapper div key remount for forced reinit 2026-08-01 12:38:55 +00:00
Hermes d142db40c1 fix: calendar day view - test with regular Calendar (no DnD) 2026-08-01 12:35:01 +00:00
Hermes b9cce1e452 fix: calendar day view - toolbar onView directly sets page state, Calendar remounts via key 2026-08-01 12:33:39 +00:00
Hermes 60dd5a8280 fix: calendar day view - key-based remount workaround for react-big-calendar DnD 2026-08-01 12:32:13 +00:00
Hermes 4693f81095 fix: calendar day view - explicit onView override in toolbar 2026-08-01 12:30:30 +00:00
Hermes b7b7de64fb fix: add missing useRef import in calendar.tsx 2026-08-01 12:28:37 +00:00
Hermes 3a0df07296 fix: R3 bugs - TipTap focus leak, Quick Capture palette, Calendar day view 2026-08-01 12:26:43 +00:00
Hermes 118617c892 fix: MCP endpoint at /api/mcp (Bug #2) + REST API key auth (Bug #3)
Bug #2 (LOW): MCP endpoint was mounted at /mcp instead of /api/mcp,
inconsistent with all other API routes. Changed app.route("/mcp", ...)
to app.route("/api/mcp", ...) in apps/api/src/index.ts.

Bug #3 (MEDIUM): REST API endpoints only accepted JWT cookie/session
auth, not API key auth. Added authenticateApiKey() to authMiddleware
in apps/api/src/middleware/auth.ts so REST endpoints now accept
Authorization: Bearer <api_key> as a fallback after JWT verification.
2026-08-01 11:33:12 +00:00
Hermes a80207fc9a fix(calendar): day/week view toggle — controlled view prop + currentView in CustomToolbar 2026-08-01 05:34:35 +00:00
Hermes f337c63915 fix(Dockerfile.spa): exclude node_modules from COPY to avoid BuildKit cache mount conflict
The COPY apps/web step was failing with:
  cannot copy to non-directory: .../app/apps/web/node_modules/@hookform/resolvers
because the host node_modules symlink conflicted with BuildKits overlayfs
cache mount. Adding --exclude=node_modules sidesteps the conflict (the
node_modules in the image is freshly created by the earlier bun install).

Parent: t_e1cbd87d
2026-08-01 04:40:05 +00:00
Hermes 3847ef7b2d T14 fixup: route ordering + UUID guard for /api/agents/:id
Verification after commit d4c02a3 found Hono matching /:id BEFORE /activity
when the bare /api/agents/activity request hit the API — Postgres returned a
500 cast error because id='activity' was not a valid UUID.

Two changes:
1. Move GET /api/agents/activity registration to BEFORE GET /:id so Hono's
   matcher picks the static path before the param path.
2. Add a UUID-format guard at the top of GET /api/agents/:id — returns
   404 when id is not a UUID. Defense in depth: prevents future 500s if
   a similarly-shaped static route collides with /:id.

Parent: t_e1cbd87d
2026-08-01 04:24:20 +00:00
Hermes 2e451093b6 T14/Bug #3 HIGH: Postgres search_vector trigger + backfill
The tasks/notes/projects/habits/domains tables all have a tsvector
search_vector column and a GIN index, but nothing was populating it.
GET /api/search returned zero results for every query.

This migration adds a BEFORE INSERT OR UPDATE trigger on each of the
five searchable tables. The trigger function uses to_tsvector with
the appropriate title + description/content columns and is named
project_e_search_vector_<table>_update. Drops any pre-existing trigger
of the same name so re-running the migration is safe.

Backfills 64 existing rows.

Parent: t_e1cbd87d
2026-08-01 04:15:14 +00:00
Hermes d4c02a3de2 T14/Bug #4 #5 #6 #8 #10: commit in-flight worker fixes (agents _all sentinel, settings useThemeStore, 5 detail route registrations)
Continuation of the T10 test report fixes (45d0810). The prior workers
for these bugs wrote the code but died before committing. This commit
captures their work and additionally restores a GET /:id/permissions
route that the prior helper-script accidentally deleted.

- Bug #4 HIGH: GET /api/agents/_all/activity now skips the WHERE clause
  when the SPA passes '_all' as the id.
- Bug #5 MED: Settings > Appearance tab now reads/writes useThemeStore
  (Zustand) so theme changes are consistent with the command palette.
- Bug #6 HIGH: /projects/:id detail page now exists. Plus 4 sibling
  detail pages (tasks/:id, habits/:id, notes/:id, canvas/:id) wired
  into the route tree.
- Bug #8 MED: GET /api/agents/activity (bare path) now returns the
  last 100 activity items instead of falling into /:id/activity with
  id='activity' (which failed the UUID cast).
- Bug #10 LOW: tasks/:id, habits/:id, notes/:id, canvas/:id detail
  pages are now committed (the worker that wrote them never committed).
- graph.tsx and index.tsx overlap with earlier committed fixes
  (t_cc5d9887 and t_296f0121); changes are additive and don't regress.

Also restores GET /api/agents/:id/permissions which the prior helper
script accidentally removed when reformatting agents.ts.

Parent: t_e1cbd87d
2026-08-01 04:13:25 +00:00
Hermes edec2d72d4 T11/Bug #1: fix login persistence — setCookie on /api/auth/credentials
Server now sets the session cookie on successful login. SPA at same
origin includes the cookie on every subsequent request, so the auth
middleware can verify and the user is no longer bounced back to /login.

Parent: t_e1cbd87d (T10 test report)
2026-08-01 03:57:53 +00:00
Hermes bb64be5d56 T9/Phase 7: deploy 4-container compose + Caddy reverse proxy
- docker-compose.yml: 4 services (db, api, spa, worker), Next.js removed
- Dockerfile.api: Bun base, install, run
- Dockerfile.worker: Bun base, install, run
- Dockerfile.spa: multi-stage (Bun build -> Caddy serve), fixed lockfile + workspace stubs
- Caddyfile: serve SPA + reverse-proxy /api/* + /mcp, SPA fallback routing
- Old Node worker stopped, replaced with new Bun worker
- Old Next.js server on :3000 stopped
- BASELINE.md: Phase 7 Deploy section added
- DEPLOY.md: deploy/rollback/debug guide added
2026-08-01 02:43:22 +00:00
Hermes ef163a9d6f T8/Phase 6: OSS component swap polish
- Calendar: react-big-calendar w/ withDragAndDrop, date-fns localizer, custom event renderer (color tokens), custom toolbar, responsive (agenda on mobile), now indicator
- Graph: react-force-graph-2d w/ custom node/link canvas renderers, hover highlighting, search-to-fly, filter panel (entity + relationship types), ResizeObserver, 500-node cap, zoom controls
- Command palette: cmdk polish (recent items, @mention filter, settings/logout actions, mobile full-screen)
- Shortcuts: @github/hotkey for g+letter nav, n+letter create, ?, /, c; Cmd+K for palette
- README.md added with architecture, page list, shortcuts, dev guide
- Bundle: 369 KB gzipped (under 1.5 MB budget)
2026-08-01 02:34:37 +00:00
Hermes c18d7e9abe T7/Phase 5-1: Dashboard page (configurable widget grid, 8 widgets) 2026-08-01 02:21:24 +00:00
Hermes f617c39937 T6/Phase 4: 7 core entity pages (Tasks, Habits, Projects, Notes, Calendar, Graph, Search) 2026-08-01 02:10:18 +00:00
Hermes efcc748adb T5: remove stale T1 stub index.tsx (replaced by _app/index.tsx) 2026-08-01 02:00:40 +00:00
Hermes e86a7c0672 T5/Phase 3: SPA shell + navigation
- TanStack Router with type-safe file-based routes
- Sidebar: collapsible, workspace switcher, 12 nav links, user menu
- Topbar: search, quick-add, notifications, user avatar
- cmdk command palette: nav + create + search + @mentions
- Keyboard shortcuts: Cmd+K palette, g+t/h/p/n/c/g/s navigation, ? help
- Theme: dark default, accent picker (slate/blue/green/purple/orange), persisted to localStorage
- Auth: login -> /, logout -> /login, 401 redirect
- Placeholder pages for all 13 nav routes (real in T6/T7)
- Typed API client with useApiQuery/useApiMutation hooks
2026-08-01 02:00:24 +00:00
Hermes c277e3a14f T4/Phase 2C-13: port import/export routes to Hono (2 routes) 2026-08-01 01:47:51 +00:00
Hermes 39a74c5e3d T4/Phase 2C-12: port analytics routes to Hono (3 routes) 2026-08-01 01:47:49 +00:00
Hermes 910c28b095 T4/Phase 2C-11: port error log routes to Hono (2 routes) 2026-08-01 01:47:48 +00:00
Hermes 59c4fa4648 T4/Phase 2C-10: port custom fields routes to Hono (4 routes) 2026-08-01 01:47:46 +00:00
Hermes aa3629609a T4/Phase 2C-9: port tags routes to Hono (3 routes) 2026-08-01 01:47:45 +00:00
Hermes 99420b150b T4/Phase 2C-8: port daily notes routes to Hono (3 routes) 2026-08-01 01:47:43 +00:00
Hermes 0844dc77ac T4/Phase 2C-7: port canvas routes to Hono (5 routes) 2026-08-01 01:47:42 +00:00
Hermes 7243c31e1e T4/Phase 2C-6: port webhooks routes to Hono (5 routes) 2026-08-01 01:47:37 +00:00
Hermes d56993fac2 T4/Phase 2C-5: port agents routes to Hono (8 routes) 2026-08-01 01:47:35 +00:00
Hermes ea767bdbe3 T4/Phase 2C-4: port dashboard routes to Hono (4 routes) 2026-08-01 01:47:34 +00:00
Hermes 102f51ec1f T4/Phase 2C-3: port graph routes to Hono (4 routes) 2026-08-01 01:47:32 +00:00
Hermes 89dbe69137 T4/Phase 2C-2: port calendar routes to Hono (5 routes) 2026-08-01 01:47:28 +00:00
Hermes c1c95f727a T4/Phase 2C-1: port search routes to Hono (3 routes) + new DB tables 2026-08-01 01:47:25 +00:00
Hermes 23d2a96dd1 T3/Phase 2B-4: port notes routes to Hono (~7 routes) + wikilink service + route registration 2026-08-01 01:38:25 +00:00
Hermes ac90c1bd6d T3/Phase 2B-3: port projects routes to Hono (~12 routes) 2026-08-01 01:38:21 +00:00