Commit Graph

421 Commits

Author SHA1 Message Date
720460852c feat(20-02): add FabMenu and CatalogSearchOverlay components
- FabMenu with animated mini menu (Add to Collection, Start Thread, New Setup)
- CatalogSearchOverlay with debounced search, tag chip filtering, result cards
- Loading skeleton grid and empty state
- Framer Motion animations for menu entrance/exit and overlay transitions
2026-04-06 08:02:59 +02:00
55829f20fb fix: remove duplicate tags migration (already in 0002_wakeful_vermin) 2026-04-06 08:00:20 +02:00
62249b5b48 Merge branch 'worktree-agent-adbc35a5' into Develop
# Conflicts:
#	.planning/STATE.md
#	drizzle-pg/meta/0002_snapshot.json
#	drizzle-pg/meta/_journal.json
#	src/db/schema.ts
2026-04-06 08:00:04 +02:00
9481391bc6 docs: stage state before merge 2026-04-06 07:59:55 +02:00
256d81e43d docs(20-01): complete tags API, route registration, and UI state plan
- Add 20-01-SUMMARY.md with execution results
- Update STATE.md with progress and decisions
2026-04-06 07:59:41 +02:00
67facea338 feat(20-01): extend UIStore with FAB/catalog state, add useTags hook, update useGlobalItems
- Add fabMenuOpen, openFabMenu, closeFabMenu to UIStore
- Add catalogSearchOpen, catalogSearchMode, openCatalogSearch, closeCatalogSearch
- openCatalogSearch also closes FAB menu (natural flow)
- Create useTags hook with 5-min staleTime cache
- Add optional tags parameter to useGlobalItems for tag filtering
2026-04-06 07:57:47 +02:00
2ec1276849 feat(20-01): add tags table, tag service/route, register global-items route
- Create tags table in schema with id, name (unique), createdAt
- Generate migration for tags table
- Create tag.service.ts with getAllTags (id+name, alphabetical order)
- Create tags.ts route with GET / handler
- Register /api/global-items and /api/tags routes in index.ts
- Add auth skip for GET /api/tags and GET /api/global-items
2026-04-06 07:56:40 +02:00
6f07e874f9 test(20-01): add failing tests for tag service and route
- Tag service tests: empty array, alphabetical ordering, id+name projection
- Tag route tests: GET /api/tags returns 200, correct tag objects
2026-04-06 07:56:32 +02:00
d020b4b63d docs(20): create phase plan for FAB and full-screen catalog search 2026-04-06 07:49:30 +02:00
d602f27f14 docs(phase-20): add validation strategy 2026-04-06 07:43:07 +02:00
4b7bcd92ac docs(20): research phase domain 2026-04-06 07:42:22 +02:00
6965ad5b4f docs(state): record phase 20 context session 2026-04-06 07:38:18 +02:00
881d0be208 docs(20): capture phase context 2026-04-06 07:38:09 +02:00
d659dccd40 docs(phase-19): complete phase execution 2026-04-06 00:59:24 +02:00
1b7b005c83 docs(19-03): complete global item tag filtering and COALESCE merge plan 2026-04-06 00:27:14 +02:00
0a233c754d feat(19-03): add COALESCE merge for reference items in secondary services
- Setup service: LEFT JOIN globalItems in getAllSetups totals and getSetupWithItems
- Totals service: LEFT JOIN globalItems in getCategoryTotals and getGlobalTotals
- Profile service: LEFT JOIN globalItems in getPublicProfile totals and getPublicSetupWithItems
- CSV service: LEFT JOIN globalItems in exportItemsCsv for merged name/weight/price
2026-04-06 00:26:13 +02:00
ecc6ac689a feat(19-03): add tag filtering to global item search and migrate owner count
- searchGlobalItems now accepts tagNames param with AND intersection logic
- Owner count uses items.globalItemId instead of removed itemGlobalLinks
- Removed linkItemToGlobal and unlinkItemFromGlobal functions
- Route handlers now async with tags query param support
- Rewrote tests to async PGlite pattern, added tag filtering tests

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 20:55:36 +02:00
1bdb34d33e Merge branch 'worktree-agent-a5710ab6' into Develop
# Conflicts:
#	.planning/STATE.md
2026-04-05 20:51:51 +02:00
a670269ae3 docs: stage pending state updates 2026-04-05 20:51:43 +02:00
59deaea95a docs(19-02): complete item and thread service COALESCE merge plan
- SUMMARY.md with task commits, decisions, and verification results
- STATE.md updated with position, progress, and decisions
- ROADMAP.md updated with plan progress
2026-04-05 20:51:26 +02:00
8a5ee731d0 feat(19-02): add catalog-linked candidates, branched resolution, remove link/unlink routes
- getThreadWithCandidates LEFT JOINs globalItems with COALESCE for name, weight, price, image
- createCandidate accepts and stores globalItemId
- resolveThread branches: reference item (globalItemId set) vs standalone (full data copy)
- Removed link/unlink endpoints from items route (replaced by direct globalItemId FK)
- 6 new tests for catalog-linked candidates and branched resolution
2026-04-05 20:49:56 +02:00
d1ffd79bbb feat(19-02): add COALESCE merge for reference items in item service
- getAllItems and getItemById LEFT JOIN globalItems with COALESCE for name, weight, price, image
- createItem accepts globalItemId and purchasePriceCents, stores brand+model as fallback name
- duplicateItem preserves globalItemId and purchasePriceCents
- updateItem type includes globalItemId and purchasePriceCents
- 10 new tests for reference item creation and merged data retrieval
2026-04-05 20:34:54 +02:00
611050b97a Merge branch 'worktree-agent-a64432fc' into Develop
# Conflicts:
#	.planning/STATE.md
2026-04-05 20:29:48 +02:00
a7ec72a761 docs(19-01): complete reference item model and tags schema plan
- Add 19-01-SUMMARY.md with execution results
- Update STATE.md with phase 19 position and decisions
- Update ROADMAP.md with plan progress
2026-04-05 20:29:27 +02:00
e9baa8d7e0 feat(19-01): update Zod schemas, types, and seed script for reference model
- Add globalItemId and purchasePriceCents to createItemSchema
- Add globalItemId to createCandidateSchema
- Add tags param to searchGlobalItemsSchema
- Remove linkItemSchema from schemas and types
- Replace ItemGlobalLink with Tag and GlobalItemTag types
- Convert seedGlobalItems to async, add seedTags with 30 curated tags
2026-04-05 20:27:51 +02:00
5df513c138 feat(19-01): update schema with reference item model and tags tables
- Add globalItemId and purchasePriceCents columns to items table
- Add globalItemId column to threadCandidates table
- Add tags and globalItemTags tables for tag system
- Remove itemGlobalLinks table (replaced by direct FK)
- Generate migration with data migration step before table drop
2026-04-05 20:25:59 +02:00
323a80b450 docs(19): create phase plan 2026-04-05 20:20:25 +02:00
a93d9a66ec docs(phase-19): add validation strategy 2026-04-05 20:12:53 +02:00
bead640ab4 docs(phase-19): research reference item model and tags schema
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 20:12:17 +02:00
be80ea96c5 docs(state): record phase 19 context session 2026-04-05 20:04:23 +02:00
53df2bfd20 docs(19): capture phase context 2026-04-05 20:04:14 +02:00
e59e724d84 docs: add catalog-driven gear flow design spec
Some checks failed
CI / ci (push) Failing after 11s
CI / e2e (push) Has been skipped
Conceptual vision for integrating the global catalog into the add/edit
flow — search-first UX, tag system, catalog submission with review,
and thread-driven research from catalog items.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:25:39 +02:00
574a12e6fa fix: OIDC auth flow, Vite proxy, and PostgreSQL query compat
- Add auth redirect in root layout for unauthenticated users
- Proxy OIDC routes (/login, /callback, /logout) through Vite dev server
- Strip Secure flag from OIDC cookies in dev mode (HTTP localhost)
- Disable retry on auth query to prevent stale cookie loops
- Fix SQLite .get()/.all()/.run() calls in category and global-item
  services for PostgreSQL compatibility
- Add userId scoping to category service functions
- Add OIDC error logging in auth middleware
- Apply linter auto-formatting across affected files

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 18:25:31 +02:00
f7588827b1 docs(phase-18): complete phase execution
Some checks failed
CI / ci (push) Failing after 20s
CI / e2e (push) Has been skipped
2026-04-05 13:22:34 +02:00
b2936b098e Merge branch 'worktree-agent-af80e237' into Develop
# Conflicts:
#	.planning/REQUIREMENTS.md
#	.planning/STATE.md
2026-04-05 13:21:56 +02:00
0b9666e764 docs(18-05): complete user profiles and public sharing client plan
- Create SUMMARY.md with execution results
- Update STATE.md with progress and decisions
- Mark PROF-01 through PROF-05 requirements complete
2026-04-05 13:21:16 +02:00
5ddc5fa2f7 docs(18-04): complete global item catalog client plan
- SUMMARY.md with task commits and decisions
- STATE.md updated with progress and decisions
- ROADMAP.md updated with plan progress (4/5 plans complete)
- REQUIREMENTS.md: GLOB-03, GLOB-04, GLOB-05 marked complete
2026-04-05 13:19:47 +02:00
a9956681ba feat(18-05): add public profile page and setup visibility toggle
- Create public profile page at /users/$userId with avatar, name, bio, setups
- Create PublicSetupCard component for profile page setup listing
- Add isPublic toggle button on setup detail page
- Add Public badge to SetupCard in list view
- Update useSetups hook with isPublic field on interfaces
2026-04-05 13:19:36 +02:00
f5233d075f feat(18-04): add LinkToGlobalItem component for catalog linking
- Search-based dropdown to find and link global catalog items
- Shows linked status with link to global item detail page
- Unlink button to remove association
- Debounced search with loading and empty states
2026-04-05 13:18:24 +02:00
f53f66d321 feat(18-04): add global item hooks, catalog browse page, and detail page
- useGlobalItems/useGlobalItem/useLinkItem/useUnlinkItem hooks
- Global catalog browse page with search, debounce, and skeleton loading
- Global item detail page with owner count badge
- GlobalItemCard component with brand, model, specs badges
2026-04-05 13:17:39 +02:00
f120d179f7 feat(18-05): add profile hooks and profile edit UI in settings
- Create usePublicProfile and useUpdateProfile hooks
- Create ProfileSection component with avatar upload, display name, bio
- Add Profile section to settings page (visible when authenticated)
2026-04-05 13:17:31 +02:00
2843351d90 Merge branch 'worktree-agent-a86c0a6d' into Develop
# Conflicts:
#	.planning/REQUIREMENTS.md
#	.planning/STATE.md
#	src/db/schema.ts
#	src/db/seed.ts
#	src/server/index.ts
#	src/server/routes/setups.ts
#	src/server/services/category.service.ts
#	src/server/services/setup.service.ts
#	src/shared/schemas.ts
#	src/shared/types.ts
2026-04-05 13:13:34 +02:00
465297c398 Merge branch 'worktree-agent-a7e6e4b2' into Develop
# Conflicts:
#	.planning/REQUIREMENTS.md
#	.planning/ROADMAP.md
#	.planning/STATE.md
#	drizzle/meta/_journal.json
#	src/db/schema.ts
#	src/db/seed.ts
#	src/shared/schemas.ts
#	src/shared/types.ts
2026-04-05 13:13:26 +02:00
95143826ed docs(18-03): complete user profiles and public sharing plan
- SUMMARY.md with 2 tasks, 25 tests passing, 9 files modified
- STATE.md updated with progress and decisions
- REQUIREMENTS.md: PROF-01 through PROF-05 marked complete
2026-04-05 13:13:12 +02:00
eb8f4b7cb2 feat(18-03): add profile routes, public setup endpoint, and auth middleware updates
- GET /api/users/:id/profile: public profile with public setups (no auth)
- PUT /api/auth/profile: update own profile (requires auth)
- GET /api/setups/:id/public: public setup view with items (no auth)
- Auth middleware skips public profile and public setup GET endpoints
- Register profileRoutes at /api/users in index.ts
- Add getOrCreateUncategorized to category service (Rule 3 fix)
- 10 route tests covering auth, public access, and 404 cases
2026-04-05 13:10:13 +02:00
3c39bb60bf docs(18-02): complete global items service and routes plan
- SUMMARY.md with full task/commit/deviation documentation
- STATE.md updated to Phase 18, Plan 2/5
- ROADMAP.md progress updated
- REQUIREMENTS.md: GLOB-01 through GLOB-05 marked complete
2026-04-05 13:09:42 +02:00
d97d5d92ba feat(18-02): add global item routes, item link/unlink endpoints, and route tests
- GET /api/global-items with optional q search parameter
- GET /api/global-items/:id with ownerCount
- POST /api/items/:id/link to link user item to global item
- DELETE /api/items/:id/link to unlink
- Route registered in index.ts
- 10 route tests covering all endpoints
2026-04-05 13:07:26 +02:00
854811dd6b feat(18-03): add profile service and setup isPublic support
- updateProfile: update displayName, avatarUrl, bio for a user
- getPublicProfile: return user info with only public setups
- getPublicSetupWithItems: return setup details only if isPublic is true
- createSetup now accepts and persists isPublic field
- updateSetup can toggle isPublic
- getAllSetups includes isPublic in response
2026-04-05 13:06:44 +02:00
60dd9f4934 feat(18-02): implement global item service, seed script, and seed integration
- searchGlobalItems with LIKE-based case-insensitive search and wildcard escaping
- getGlobalItemWithOwnerCount with owner count from junction table
- linkItemToGlobal/unlinkItemFromGlobal for item-global linking
- seedGlobalItems idempotent seed from JSON catalog
- Integrated seed into seedDefaults startup
2026-04-05 13:06:07 +02:00
3a6876f7e8 test(18-02): add failing tests for global item service and seed
- 10 test cases covering search, owner count, link/unlink, seed idempotency
- Added globalItems/itemGlobalLinks tables to SQLite schema
- Added Zod schemas and types for global items
- Created 18-item bikepacking gear seed data JSON
2026-04-05 13:05:28 +02:00