docs(23-01): complete manual entry fallback plan
- ManualEntryForm component with CategoryPicker, ImageUpload, price-to-cents conversion - CatalogSearchOverlay wired with Add Manually entry points, inline form, success card - STATE.md updated with position, decisions, metrics - ROADMAP.md phase 23 marked complete - CATFLOW-07, CATFLOW-08 requirements marked complete
This commit is contained in:
@@ -59,7 +59,7 @@
|
|||||||
- [x] **Phase 20: FAB & Full-Screen Catalog Search** — Global FAB with mini menu, full-screen catalog search with tag filtering (completed 2026-04-06)
|
- [x] **Phase 20: FAB & Full-Screen Catalog Search** — Global FAB with mini menu, full-screen catalog search with tag filtering (completed 2026-04-06)
|
||||||
- [x] **Phase 21: Item & Catalog Detail Pages** — Full detail pages for collection items and catalog entries, replacing slide-out panels (completed 2026-04-06)
|
- [x] **Phase 21: Item & Catalog Detail Pages** — Full detail pages for collection items and catalog entries, replacing slide-out panels (completed 2026-04-06)
|
||||||
- [x] **Phase 22: Add-from-Catalog & Thread Integration** — Add catalog items to collection and threads, resolution creates reference items (completed 2026-04-06)
|
- [x] **Phase 22: Add-from-Catalog & Thread Integration** — Add catalog items to collection and threads, resolution creates reference items (completed 2026-04-06)
|
||||||
- [ ] **Phase 23: Manual Entry Fallback** — Manual add for items not in catalog, non-functional submission prompt
|
- [x] **Phase 23: Manual Entry Fallback** — Manual add for items not in catalog, non-functional submission prompt (completed 2026-04-06)
|
||||||
|
|
||||||
## Phase Details
|
## Phase Details
|
||||||
|
|
||||||
@@ -242,9 +242,9 @@ Plans:
|
|||||||
1. User can fall back to manual entry from catalog search via "Add Manually" link
|
1. User can fall back to manual entry from catalog search via "Add Manually" link
|
||||||
2. Manual entry saves a standalone collection item (no globalItemId)
|
2. Manual entry saves a standalone collection item (no globalItemId)
|
||||||
3. "Submit to catalog?" prompt appears after manual save but takes no backend action
|
3. "Submit to catalog?" prompt appears after manual save but takes no backend action
|
||||||
**Plans:** 1 plan
|
**Plans:** 1/1 plans complete
|
||||||
Plans:
|
Plans:
|
||||||
- [ ] 23-01-PLAN.md -- ManualEntryForm + CatalogSearchOverlay wiring
|
- [x] 23-01-PLAN.md -- ManualEntryForm + CatalogSearchOverlay wiring
|
||||||
**UI hint**: yes
|
**UI hint**: yes
|
||||||
|
|
||||||
## Progress
|
## Progress
|
||||||
@@ -273,4 +273,4 @@ Plans:
|
|||||||
| 20. FAB & Full-Screen Catalog Search | v2.0 | 2/2 | Complete | 2026-04-06 |
|
| 20. FAB & Full-Screen Catalog Search | v2.0 | 2/2 | Complete | 2026-04-06 |
|
||||||
| 21. Item & Catalog Detail Pages | v2.0 | 1/1 | Complete | 2026-04-06 |
|
| 21. Item & Catalog Detail Pages | v2.0 | 1/1 | Complete | 2026-04-06 |
|
||||||
| 22. Add-from-Catalog & Thread Integration | v2.0 | 2/2 | Complete | 2026-04-06 |
|
| 22. Add-from-Catalog & Thread Integration | v2.0 | 2/2 | Complete | 2026-04-06 |
|
||||||
| 23. Manual Entry Fallback | v2.0 | 0/? | Not started | - |
|
| 23. Manual Entry Fallback | v2.0 | 1/1 | Complete | 2026-04-06 |
|
||||||
|
|||||||
@@ -2,15 +2,15 @@
|
|||||||
gsd_state_version: 1.0
|
gsd_state_version: 1.0
|
||||||
milestone: v1.3
|
milestone: v1.3
|
||||||
milestone_name: Research & Decision Tools
|
milestone_name: Research & Decision Tools
|
||||||
status: executing
|
status: verifying
|
||||||
stopped_at: Phase 23 plans verified
|
stopped_at: Completed 23-01-PLAN.md
|
||||||
last_updated: "2026-04-06T15:36:08.861Z"
|
last_updated: "2026-04-06T15:57:43.959Z"
|
||||||
last_activity: 2026-04-06 -- Phase 22 execution started
|
last_activity: 2026-04-06
|
||||||
progress:
|
progress:
|
||||||
total_phases: 17
|
total_phases: 17
|
||||||
completed_phases: 15
|
completed_phases: 16
|
||||||
total_plans: 44
|
total_plans: 44
|
||||||
completed_plans: 41
|
completed_plans: 42
|
||||||
percent: 0
|
percent: 0
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -21,14 +21,14 @@ progress:
|
|||||||
See: .planning/PROJECT.md (updated 2026-04-03)
|
See: .planning/PROJECT.md (updated 2026-04-03)
|
||||||
|
|
||||||
**Core value:** Help people make better gear decisions — discover what others use, compare real-world data, and see how a potential buy affects your setup before committing.
|
**Core value:** Help people make better gear decisions — discover what others use, compare real-world data, and see how a potential buy affects your setup before committing.
|
||||||
**Current focus:** Phase 22 — add-from-catalog-thread-integration
|
**Current focus:** Phase 23 — manual-entry-fallback
|
||||||
|
|
||||||
## Current Position
|
## Current Position
|
||||||
|
|
||||||
Phase: 22 (add-from-catalog-thread-integration) — EXECUTING
|
Phase: 23 (manual-entry-fallback) — EXECUTING
|
||||||
Plan: 1 of 2
|
Plan: 1 of 1
|
||||||
Status: Executing Phase 22
|
Status: Phase complete — ready for verification
|
||||||
Last activity: 2026-04-06 -- Phase 22 execution started
|
Last activity: 2026-04-06
|
||||||
|
|
||||||
Progress: [----------] 0% (v2.0 milestone)
|
Progress: [----------] 0% (v2.0 milestone)
|
||||||
|
|
||||||
@@ -61,6 +61,8 @@ Key decisions made during v2.0 planning:
|
|||||||
- [Phase 21]: Preserved currentThreadId derivation in __root.tsx for CandidateDeleteDialog
|
- [Phase 21]: Preserved currentThreadId derivation in __root.tsx for CandidateDeleteDialog
|
||||||
- [Phase 21]: CollectionView empty state Add button rewired to catalog search overlay
|
- [Phase 21]: CollectionView empty state Add button rewired to catalog search overlay
|
||||||
- [Phase 21]: ItemForm/CandidateForm decoupled from UIStore with onClose prop pattern
|
- [Phase 21]: ItemForm/CandidateForm decoupled from UIStore with onClose prop pattern
|
||||||
|
- [Phase 23-manual-entry-fallback]: ManualEntryForm uses local state for manualEntryMode, no Zustand UIStore changes
|
||||||
|
- [Phase 23-manual-entry-fallback]: Submit to Catalog? is toast-only stub — no backend action, deferred to future phase
|
||||||
|
|
||||||
### Pending Todos
|
### Pending Todos
|
||||||
|
|
||||||
@@ -72,6 +74,7 @@ None active.
|
|||||||
|---|-------------|------|--------|-----------|
|
|---|-------------|------|--------|-----------|
|
||||||
| 260406-j44 | Comprehensive dev seed script for bikepacking gear data | 2026-04-06 | — | [260406-j44-comprehensive-dev-seed-script-for-bikepa](./quick/260406-j44-comprehensive-dev-seed-script-for-bikepa/) |
|
| 260406-j44 | Comprehensive dev seed script for bikepacking gear data | 2026-04-06 | — | [260406-j44-comprehensive-dev-seed-script-for-bikepa](./quick/260406-j44-comprehensive-dev-seed-script-for-bikepa/) |
|
||||||
| Phase 21 P03 | 6min | 2 tasks | 10 files |
|
| Phase 21 P03 | 6min | 2 tasks | 10 files |
|
||||||
|
| Phase 23-manual-entry-fallback P01 | 18 | 2 tasks | 2 files |
|
||||||
|
|
||||||
### Blockers/Concerns
|
### Blockers/Concerns
|
||||||
|
|
||||||
@@ -80,6 +83,6 @@ None active.
|
|||||||
|
|
||||||
## Session Continuity
|
## Session Continuity
|
||||||
|
|
||||||
Last session: 2026-04-06T15:36:08.859Z
|
Last session: 2026-04-06T15:57:43.957Z
|
||||||
Stopped at: Phase 23 plans verified
|
Stopped at: Completed 23-01-PLAN.md
|
||||||
Resume file: .planning/phases/23-manual-entry-fallback/23-01-PLAN.md
|
Resume file: None
|
||||||
|
|||||||
115
.planning/phases/23-manual-entry-fallback/23-01-SUMMARY.md
Normal file
115
.planning/phases/23-manual-entry-fallback/23-01-SUMMARY.md
Normal file
@@ -0,0 +1,115 @@
|
|||||||
|
---
|
||||||
|
phase: 23-manual-entry-fallback
|
||||||
|
plan: 01
|
||||||
|
subsystem: ui
|
||||||
|
tags: [react, tanstack-query, form, catalog, sonner]
|
||||||
|
|
||||||
|
# Dependency graph
|
||||||
|
requires:
|
||||||
|
- phase: 20-fab-full-screen-catalog-search
|
||||||
|
provides: CatalogSearchOverlay with EmptyState component
|
||||||
|
- phase: 22-add-from-catalog-thread-integration
|
||||||
|
provides: AddToCollectionModal pattern for lightweight form, deferred "Add Manually" link
|
||||||
|
provides:
|
||||||
|
- ManualEntryForm component for standalone item creation without globalItemId
|
||||||
|
- "Add Manually" entry points in CatalogSearchOverlay (EmptyState + persistent below results)
|
||||||
|
- Post-save success card with "Submit to Catalog?" toast-only stub, "Add Another", and "Done"
|
||||||
|
- Context-sensitive back arrow and header text in CatalogSearchOverlay
|
||||||
|
affects: [catalog-driven-gear-flow, item-creation, collection-management]
|
||||||
|
|
||||||
|
# Tech tracking
|
||||||
|
tech-stack:
|
||||||
|
added: []
|
||||||
|
patterns:
|
||||||
|
- Local state (manualEntryMode, savedItemName) for overlay view switching instead of Zustand
|
||||||
|
- CategoryPicker + ImageUpload reuse pattern for compact forms
|
||||||
|
- Price string-to-cents conversion via Math.round(Number(val) * 100)
|
||||||
|
- "Coming soon" toast stub for deferred catalog submission feature
|
||||||
|
|
||||||
|
key-files:
|
||||||
|
created:
|
||||||
|
- src/client/components/ManualEntryForm.tsx
|
||||||
|
modified:
|
||||||
|
- src/client/components/CatalogSearchOverlay.tsx
|
||||||
|
|
||||||
|
key-decisions:
|
||||||
|
- "ManualEntryForm uses local useState for all view state, no Zustand UIStore changes"
|
||||||
|
- "No globalItemId in createItem call — deliberately creates standalone items"
|
||||||
|
- "No toast.success on save — inline success card within overlay IS the feedback"
|
||||||
|
- "Submit to Catalog? is a toast-only stub — no backend action per D-10"
|
||||||
|
|
||||||
|
patterns-established:
|
||||||
|
- "Inline mode switching in overlay: local manualEntryMode state replaces results area content"
|
||||||
|
- "Context-sensitive back arrow: onClick checks manualEntryMode before deciding to close or return"
|
||||||
|
|
||||||
|
requirements-completed: [CATFLOW-07, CATFLOW-08]
|
||||||
|
|
||||||
|
# Metrics
|
||||||
|
duration: 18min
|
||||||
|
completed: 2026-04-06
|
||||||
|
---
|
||||||
|
|
||||||
|
# Phase 23 Plan 01: Manual Entry Fallback Summary
|
||||||
|
|
||||||
|
**ManualEntryForm component with CategoryPicker, ImageUpload, and cents conversion wired into CatalogSearchOverlay as inline mode with entry points, success card, and context-sensitive navigation**
|
||||||
|
|
||||||
|
## Performance
|
||||||
|
|
||||||
|
- **Duration:** 18 min
|
||||||
|
- **Started:** 2026-04-06T15:38:00Z
|
||||||
|
- **Completed:** 2026-04-06T15:56:44Z
|
||||||
|
- **Tasks:** 2
|
||||||
|
- **Files modified:** 2
|
||||||
|
|
||||||
|
## Accomplishments
|
||||||
|
- Created ManualEntryForm with all fields per D-06: name, category (CategoryPicker), weight, MSRP, purchase price, product URL, notes, image upload (ImageUpload)
|
||||||
|
- Wired CatalogSearchOverlay with manualEntryMode local state: inline form rendering, context-sensitive header/back arrow, hidden search UI during manual mode
|
||||||
|
- Added "Add Manually" entry points: EmptyState (context-sensitive text) and persistent link below search results
|
||||||
|
- Implemented success card with "Submit to Catalog?" toast stub, "Add Another" reset, and "Done" close
|
||||||
|
|
||||||
|
## Task Commits
|
||||||
|
|
||||||
|
Each task was committed atomically:
|
||||||
|
|
||||||
|
1. **Task 1: Create ManualEntryForm component** - `153b6cb` (feat)
|
||||||
|
2. **Task 2: Wire ManualEntryForm into CatalogSearchOverlay** - `f0e1cf4` (feat)
|
||||||
|
|
||||||
|
**Plan metadata:** (docs commit follows)
|
||||||
|
|
||||||
|
## Files Created/Modified
|
||||||
|
- `src/client/components/ManualEntryForm.tsx` - Compact form for manual item creation without globalItemId; uses CategoryPicker, ImageUpload, useCreateItem
|
||||||
|
- `src/client/components/CatalogSearchOverlay.tsx` - Added manualEntryMode/savedItemName state, entry points, inline ManualEntryForm rendering, success card
|
||||||
|
|
||||||
|
## Decisions Made
|
||||||
|
- Used local state for manualEntryMode (not Zustand) — consistent with existing CatalogSearchOverlay pattern per research anti-patterns
|
||||||
|
- No toast.success on item save — success card is the visual feedback per D-09
|
||||||
|
- "Submit to Catalog?" button calls `toast("Coming soon...")` only, no loading/disabled state per D-10
|
||||||
|
- CategoryPicker pre-selects first category via useEffect (same pattern as AddToCollectionModal to avoid categoryId=0 Zod error)
|
||||||
|
|
||||||
|
## Deviations from Plan
|
||||||
|
|
||||||
|
None - plan executed exactly as written.
|
||||||
|
|
||||||
|
## Issues Encountered
|
||||||
|
|
||||||
|
Biome formatter required minor formatting fixes on both files (multi-line conditional expressions needed to be inlined per biome's line length rules). Applied via `biome format --write` — no logic changes.
|
||||||
|
|
||||||
|
Pre-existing test failures in Item Service and Category Service (unrelated `brand` column schema issues from prior PostgreSQL migration work) were present before and after these changes. These are out of scope.
|
||||||
|
|
||||||
|
## User Setup Required
|
||||||
|
|
||||||
|
None - no external service configuration required.
|
||||||
|
|
||||||
|
## Known Stubs
|
||||||
|
|
||||||
|
- `Submit to Catalog?` button in `src/client/components/CatalogSearchOverlay.tsx` — shows "Coming soon" toast only. No catalog submission backend exists (deferred per D-10 and phase context). Future phase will wire actual submission flow.
|
||||||
|
|
||||||
|
## Next Phase Readiness
|
||||||
|
|
||||||
|
- Manual entry fallback complete. Users can add any gear item even when not found in catalog.
|
||||||
|
- Standalone items created without globalItemId are valid collection items — no further wiring needed.
|
||||||
|
- Catalog submission backend is the natural next step when ready (Phase 24+).
|
||||||
|
|
||||||
|
---
|
||||||
|
*Phase: 23-manual-entry-fallback*
|
||||||
|
*Completed: 2026-04-06*
|
||||||
Reference in New Issue
Block a user