e044547121
chore: fix lint errors — auto-format, isNaN, unused imports, button type
...
CI / ci (push) Failing after 1m41s
CI / e2e (push) Has been skipped
CI / deploy (push) Has been skipped
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:54:37 +02:00
22f5004e53
docs(38): mark phase complete — admin tag management
...
CI / ci (push) Failing after 21s
CI / deploy (push) Has been skipped
CI / e2e (push) Has been skipped
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:37:02 +02:00
5d417b7c6e
docs(38): phase verification report .planning/phases/38-admin-tag-management/38-VERIFICATION.md
2026-04-19 22:36:48 +02:00
6a5ffe8e2f
docs(38-02): complete admin tag management client UI plan
...
- Add 38-02-SUMMARY.md
- Advance STATE.md to 38-02 complete
- Mark 38-02-PLAN.md complete in ROADMAP.md
2026-04-19 22:33:36 +02:00
0571ee47fb
feat(38-02): tag edit page + enable Tags sidebar link
...
- Create admin/tags.$tagId.tsx with rename, reparent (cycle-safe), and delete
- getDescendantIds excludes self + all descendants from parent picker
- getDeleteConfirmText builds impact-aware confirmation (item count + child count)
- Delete confirmation modal with This cannot be undone
- Enable Tags sidebar Link in admin.tsx (remove disabled div + Soon badge)
2026-04-19 22:31:45 +02:00
1f8b85dc62
feat(38-02): admin tag hooks + list page with tree view and quick-add
...
- Create useAdminTags.ts with 5 hooks (useAdminTags, useAdminTag, useCreateAdminTag, useUpdateAdminTag, useDeleteAdminTag)
- Dual query key invalidation on all mutations (admin-tags + tags)
- Create admin/tags.tsx with collapsible tree view, search/filter, quick-add form
- buildTree, flattenTree, filterTree utilities for hierarchy rendering
- Chevron expand/collapse with LucideIcon, depth-based indent
2026-04-19 22:31:06 +02:00
0de809d8cb
docs(38-01): complete admin tag backend plan
...
- Add 38-01-SUMMARY.md (schema+service+routes+tests)
- Advance plan counter to 2/2, progress to 97%
- Mark 38-01 complete in ROADMAP.md
2026-04-19 22:29:38 +02:00
311ebe8afe
feat(38-01): admin tag routes + route registration + integration tests
...
- Create admin-tags.ts with GET list, GET single, POST, PUT (cycle guard → 400), DELETE
- Register /tags route in admin.ts
- Add 13-test integration suite covering CRUD, cycle detection, orphan behavior
2026-04-19 22:28:02 +02:00
8cefdf625b
feat(38-01): schema parentId + tag service CRUD + cycle detection
...
- Add parentId self-ref FK to tags table (ON DELETE SET NULL)
- Generate Drizzle migration 0010_yielding_random.sql
- Extend tag.service.ts with getAdminTags, getTagWithCounts, createTag, updateTag, deleteTag, isDescendant
- Add service tests (14 tests, all pass)
2026-04-19 22:26:47 +02:00
c0a0aeff77
docs(38): create phase plans for admin tag management
...
Two plans across 2 waves: backend (schema + service + routes + tests)
then frontend (hooks + tree list page + edit page + sidebar activation).
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:21:33 +02:00
d597affc1b
docs(38): add validation strategy
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:06:11 +02:00
136772d80c
docs(38): research phase — admin tag management
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:05:22 +02:00
f0597ae6b1
docs(38): fix UI-SPEC issues flagged by checker
...
- Spacing: change tree row indent from pl-5 (20px) to pl-4 (16px); remove non-standard exception entry
- Copywriting: change delete confirmation button from "Delete" to "Delete Tag"
- Visuals: declare focal point for list page (tree view) and edit page (name input)
- Typography: lower Label/Display from 12px to 11px, establishing 3px gap above 14px body
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 22:00:19 +02:00
096cb5a1dd
docs(38): add UI design contract for admin tag management
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 21:57:19 +02:00
11ff1eb1dd
docs(state): record phase 38 context session
2026-04-19 21:50:56 +02:00
9e49e52bc0
docs(38): capture phase context
2026-04-19 21:50:37 +02:00
45eaeb0462
docs(37): add code review report
2026-04-19 21:36:14 +02:00
821c61f912
docs(37): add plan execution summaries for 37-01 and 37-02
2026-04-19 21:35:22 +02:00
6931c33f73
feat(37-02): admin global items client — list, edit, sidebar activation
...
- Add useAdminGlobalItems hooks: infinite query, detail query, update/delete mutations
- Activate Items sidebar link in admin.tsx (replace disabled div with active Link)
- Create /admin/items list page with table, infinite scroll, search, tag filters, skeleton
- Create /admin/items/$itemId edit page with all fields, manufacturer dropdown, TagInput chip component
- Delete confirmation dialog shows ownerCount impact message
- routeTree.gen.ts updated with /admin/items and /admin/items/$itemId routes
Closes ADMN-02, ADMN-03, ADMN-04 (client side)
2026-04-19 21:34:53 +02:00
db471001fa
feat(37-01): admin global item services, routes, and unit tests
...
- Add listGlobalItemsForAdmin: paginated with batched tag/ownerCount queries
- Add updateGlobalItemById: partial update in transaction, syncs tags
- Add deleteGlobalItem: nullifies FK refs, removes tag associations before delete
- Create src/server/routes/admin-items.ts with GET/GET:id/PUT/DELETE endpoints
- Mount adminItemRoutes at /items in admin.ts (protected by requireAuth+requireAdmin)
- Extend global-item.service.test.ts with 13 new tests (all passing)
Closes ADMN-02, ADMN-03, ADMN-04 (server side)
2026-04-19 21:32:42 +02:00
3c79b7eb9a
docs(state): record phase 37 planning complete
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 21:28:52 +02:00
eabfca475c
docs(37): write wave plan files for admin global item management
...
Plans 37-01 (server: services + admin-items routes) and 37-02 (client:
hooks, list page, edit page, sidebar) with full acceptance criteria and
read_first blocks per phase context, research, and UI-SPEC artifacts.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 21:28:46 +02:00
2f2fc1e681
docs(37): add research, validation strategy, and UI design contract
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 21:04:03 +02:00
298da6da85
docs(37): capture phase context
2026-04-19 20:57:32 +02:00
868aed4f10
docs(36): add code review report
2026-04-19 20:50:57 +02:00
70a3e159ba
docs(phase-36): update ROADMAP and STATE after wave execution
2026-04-19 20:49:56 +02:00
8e76fe35dc
docs(36-02): create SUMMARY.md for plan 36-02 completion
2026-04-19 20:49:40 +02:00
72473bc5c5
chore(36-02): regenerate routeTree.gen.ts with /admin and /admin/ routes
2026-04-19 20:49:19 +02:00
8f62edc91d
feat(36-02): add conditional Admin link to UserMenu for admin users
2026-04-19 20:49:03 +02:00
7a3dca768a
feat(36-02): add /admin layout route and placeholder index
...
- admin.tsx: createFileRoute('/admin') with sidebar shell (Items, Tags disabled with Soon badge)
- admin/index.tsx: createFileRoute('/admin/') placeholder with shield icon
- useEffect guard redirects non-admin users to /
2026-04-19 20:48:53 +02:00
080838ecb5
feat(36-02): add isAdmin to AuthState interface in useAuth.ts
2026-04-19 20:48:30 +02:00
488fdbb568
docs(36-01): create SUMMARY.md for plan 36-01 completion
2026-04-19 20:48:14 +02:00
d3c5a8945b
feat(36-01): add scripts/grant-admin.ts for granting/revoking admin status
2026-04-19 20:47:49 +02:00
48381105b5
feat(36-01): add /api/admin placeholder route with requireAuth + requireAdmin middleware
2026-04-19 20:47:36 +02:00
18883fb9f0
feat(36-01): surface isAdmin in /api/auth/me response
2026-04-19 20:47:12 +02:00
34c7d27ee5
feat(36-01): add requireAdmin middleware to auth.ts
...
- Import eq from drizzle-orm and users from schema
- Export requireAdmin(c, next) that returns 401 if userId not in context, 403 if user.isAdmin is falsy
2026-04-19 20:47:06 +02:00
23cdb25063
feat(36-01): add isAdmin column to users table schema and generate migration
...
- Add isAdmin boolean(is_admin) NOT NULL DEFAULT false to users table
- Generate migration 0009_spotty_lord_tyger.sql
- NOTE: db:push requires DATABASE_URL with correct credentials to apply
2026-04-19 20:46:51 +02:00
94e2a8c019
plan(36): admin role & panel foundation — 2 plans ready
...
- 36-RESEARCH.md: schema migration, requireAdmin middleware, /api/auth/me
surface, client routing patterns, grant script, wave breakdown
- 36-UI-SPEC.md: admin shell layout, sidebar disabled nav items, UserMenu
admin link, palette and responsive notes
- 36-01-PLAN.md (wave 1): isAdmin schema column + Drizzle migration,
requireAdmin middleware, /api/auth/me isAdmin field, /api/admin placeholder
route, scripts/grant-admin.ts
- 36-02-PLAN.md (wave 2): AuthState isAdmin type, /admin client route with
sidebar shell, admin/index.tsx placeholder, UserMenu admin link
- STATE.md: updated to Phase 36, ready to execute, 2 plans
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 20:43:12 +02:00
e8cdeafba2
docs(state): record phase 36 context session .planning/STATE.md
2026-04-19 20:34:26 +02:00
38c0382f64
docs(36): capture phase context .planning/phases/36-admin-role-panel-foundation/36-CONTEXT.md .planning/phases/36-admin-role-panel-foundation/36-DISCUSSION-LOG.md
2026-04-19 20:34:10 +02:00
8f4bb5096d
docs(35): add code review fix report
2026-04-19 20:15:00 +02:00
7e684176ab
fix(35): WR-04 use startsWith/slice for brand-stripping to avoid mid-string matches
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 20:14:28 +02:00
93c273d266
fix(35): WR-03 add onError to GearImage to dismiss skeleton on broken images
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 20:14:07 +02:00
65f25e5964
fix(35): WR-02 close FAB menu before opening catalog search overlay
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-19 20:13:33 +02:00
b984e8c72f
docs(35): add code review report
2026-04-19 19:55:17 +02:00
9d41400faa
docs(35-03): complete cursor-pointer audit plan
...
- Add 35-03-SUMMARY.md with task commits, deviations, and verification results
- Update STATE.md: plan 3/3 complete, progress 100%, FIX-05 decision recorded
- Update ROADMAP.md: phase 35 marked Complete (3/3 plans)
- Update REQUIREMENTS.md: FIX-05 marked complete
2026-04-19 19:52:41 +02:00
d58f7fab40
fix(35-03): add cursor-pointer to FabMenu and BottomTabBar buttons
...
- Add cursor-pointer to FabMenu menu item buttons (motion.button)
- Add cursor-pointer to FabMenu main FAB button (motion.button)
- Add cursor-pointer to BottomTabBar anonymous collection tab button
- Add cursor-pointer to BottomTabBar anonymous setups tab button
- Add cursor-pointer to BottomTabBar search tab button
2026-04-19 19:50:38 +02:00
e1d516cfe8
fix(35-03): add cursor-pointer to ItemCard navigable case
...
- Add cursor-pointer to the non-null linkTo branch of the outer button
- Preserve cursor-default for the null linkTo branch (setup cards)
2026-04-19 19:49:44 +02:00
2d45b9024d
docs(35-02): complete image lazy loading and skeleton plan
...
- SUMMARY.md created for 35-02 (FIX-03)
- STATE.md advanced to plan 2 of 3 complete, added 35-02 decisions
- ROADMAP.md updated (2 of 3 summaries)
- REQUIREMENTS.md marked FIX-03 complete
2026-04-19 19:49:04 +02:00
88db308a16
feat(35-02): add image skeleton loading states to all card types
...
- Add useState(false) loaded state to ItemCard, CandidateCard, GlobalItemCard
- Show bg-gray-100 animate-pulse skeleton overlay while image loads
- Fade in image via transition-opacity duration-200 on onLoad callback
- No-image placeholders (icon on bg-gray-50) unchanged
- Add import { useState } from react to all three files with correct Biome import order
2026-04-19 19:47:11 +02:00