feat(categories): filter lists by category + Settings management UI (#6, slice 3) #53

Merged
rbrooks merged 1 commit from feat/v6.2-categories-filter into main 2026-06-26 03:56:33 +00:00
Owner

Final slice of the categories feature (#6) — closes out the issue.

API

  • GET /api/entries and GET /api/motifs accept a category_id filter — UUID-validated (a malformed value is ignored, not a 500), parameterized, applied as a JOIN on the junction table. The entries filter feeds both the page query and the count.

UI

  • CategoryFilterSelect — single-select dropdown that renders nothing when a project has no categories, so it stays out of the way. Added to the entry list, motif list, and the timeline filter panel (timeline syncs category_id to the URL with its other filters).
  • Settings → Categories (CategoryManagement): create (name + color), recolor, rename, and delete, with live entry/motif usage counts. Mirrors the existing TagManagement section; delete warns how many entries/motifs it will be removed from.

Tests

3 new API filter tests (entry filter, motif filter, malformed-id ignored). Full suite green on the dev server: 171 api / 63 app, both production builds.

CHANGELOG

Categories feature documented under [Unreleased] for the v6.2.0 release.

After this merges, #6 is complete — the v6.2 milestone then has #7 (data viz) and #8 (Settings/Admin redesign) remaining.

🤖 Generated with Claude Code

Final slice of the categories feature (#6) — closes out the issue. ## API - `GET /api/entries` and `GET /api/motifs` accept a `category_id` filter — UUID-validated (a malformed value is ignored, not a 500), parameterized, applied as a JOIN on the junction table. The entries filter feeds both the page query and the count. ## UI - `CategoryFilterSelect` — single-select dropdown that renders nothing when a project has no categories, so it stays out of the way. Added to the **entry list**, **motif list**, and the **timeline** filter panel (timeline syncs `category_id` to the URL with its other filters). - **Settings → Categories** (`CategoryManagement`): create (name + color), recolor, rename, and delete, with live entry/motif usage counts. Mirrors the existing `TagManagement` section; delete warns how many entries/motifs it will be removed from. ## Tests 3 new API filter tests (entry filter, motif filter, malformed-id ignored). Full suite green on the dev server: **171 api / 63 app**, both production builds. ## CHANGELOG Categories feature documented under `[Unreleased]` for the v6.2.0 release. After this merges, **#6 is complete** — the v6.2 milestone then has #7 (data viz) and #8 (Settings/Admin redesign) remaining. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
feat(categories): filter lists by category + Settings management UI (#6, slice 3)
All checks were successful
CI / App — typecheck, test & build (push) Successful in 1m40s
CI / API — typecheck & tests (push) Successful in 2m30s
CI / App — typecheck, test & build (pull_request) Successful in 1m34s
CI / API — typecheck & tests (pull_request) Successful in 2m57s
81a58ac2ce
Completes the categories feature.

API:
- GET /api/entries and GET /api/motifs accept a `category_id` filter
  (UUID-validated, parameterized; applied as a JOIN on the junction table).
  Entry filter feeds both count and page queries.

UI:
- CategoryFilterSelect (single-select dropdown, hidden when a project has no
  categories) on the entry list, motif list, and the timeline filter panel
  (timeline syncs category_id to the URL alongside its other filters).
- Settings → Categories: CategoryManagement — create (name + color), recolor,
  rename, delete, with live entry/motif usage counts. Mirrors TagManagement.

Tests: 3 new API filter tests (entry filter, motif filter, malformed-id ignored).
CHANGELOG: categories feature documented under [Unreleased] for v6.2.0.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
rbrooks deleted branch feat/v6.2-categories-filter 2026-06-26 03:56:33 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
rbrooks/TeaLeaves!53
No description provided.