From 6c76dbbee3dc4d0ac6625c7d3ec2408ff7aa3185 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Sun, 12 Apr 2026 20:11:10 +0200 Subject: [PATCH] docs(phase-29): complete phase execution Phase 29 Image Presentation verified and marked complete. 14/14 must-haves passed. Next: Phase 30 Onboarding Redesign. Co-Authored-By: Claude Opus 4.6 (1M context) --- .planning/ROADMAP.md | 4 +- .planning/STATE.md | 18 ++++---- .../29-image-presentation/29-VERIFICATION.md | 42 +++++++++++++++++++ 3 files changed, 53 insertions(+), 11 deletions(-) create mode 100644 .planning/phases/29-image-presentation/29-VERIFICATION.md diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index cfb34f1..cd64804 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -81,7 +81,7 @@ **Milestone Goal:** Fix broken user-facing features and polish the experience for real users — working profiles, better image handling, refreshed onboarding, and mobile refinements. - [x] **Phase 28: Profile & Logto Integration** — Fix profile page, integrate Logto for profile management, customize login branding, configure email verification (completed 2026-04-12) -- [ ] **Phase 29: Image Presentation** — Fit-within framing with letterbox/pillarbox instead of hard crops, optional crop positioning +- [x] **Phase 29: Image Presentation** — Fit-within framing with letterbox/pillarbox instead of hard crops, optional crop positioning (completed 2026-04-12) - [ ] **Phase 30: Onboarding Redesign** — Catalog-driven onboarding replacing manual entry, visual refresh to match current UI (promotes 999.2) - [ ] **Phase 31: Mobile Polish** — Icon-based action buttons on item views, small UX improvements @@ -257,7 +257,7 @@ Plans: | 26. Discovery Landing Page | v2.1 | 3/3 | Complete | 2026-04-10 | | 27. Top Nav Restructure & Search Bar Rethink | v2.1 | 4/4 | Complete | 2026-04-12 | | 28. Profile & Logto Integration | v2.2 | 3/3 | Complete | 2026-04-12 | -| 29. Image Presentation | v2.2 | TBD | Pending | — | +| 29. Image Presentation | v2.2 | 4/4 | Complete | 2026-04-12 | | 30. Onboarding Redesign | v2.2 | TBD | Pending | — | | 31. Mobile Polish | v2.2 | TBD | Pending | — | | 32. Setup Sharing System | v2.3 | TBD | Pending | — | diff --git a/.planning/STATE.md b/.planning/STATE.md index 7fa82e2..653acbd 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,14 +4,14 @@ milestone: v2.2 milestone_name: User Experience Polish status: executing stopped_at: Phase 31 context gathered -last_updated: "2026-04-12T18:01:20.419Z" -last_activity: 2026-04-12 -- Phase 29 execution started +last_updated: "2026-04-12T18:10:56.705Z" +last_activity: 2026-04-12 progress: total_phases: 36 - completed_phases: 21 + completed_phases: 22 total_plans: 62 - completed_plans: 57 - percent: 92 + completed_plans: 60 + percent: 97 --- # Project State @@ -25,10 +25,10 @@ See: .planning/PROJECT.md (updated 2026-04-09) ## Current Position -Phase: 29 (Image Presentation) — EXECUTING -Plan: 1 of 4 +Phase: 30 +Plan: Not started Status: Executing Phase 29 -Last activity: 2026-04-12 -- Phase 29 execution started +Last activity: 2026-04-12 Progress: [░░░░░░░░░░] 0% @@ -36,7 +36,7 @@ Progress: [░░░░░░░░░░] 0% **Velocity:** -- Total plans completed: 58 (all milestones through v2.0) +- Total plans completed: 62 (all milestones through v2.0) - v1.3: 6 plans across 4 phases (2026-03-16 to 2026-04-08) - v2.0: 32 plans across 10 phases (2026-03-17 to 2026-04-08) diff --git a/.planning/phases/29-image-presentation/29-VERIFICATION.md b/.planning/phases/29-image-presentation/29-VERIFICATION.md new file mode 100644 index 0000000..5aad71c --- /dev/null +++ b/.planning/phases/29-image-presentation/29-VERIFICATION.md @@ -0,0 +1,42 @@ +--- +phase: 29 +status: passed +verified: 2026-04-12 +--- + +# Phase 29: Image Presentation — Verification + +## Goal +Images display within the fixed aspect ratio using fit-within framing (letterbox/pillarbox) instead of hard crops, preserving the full image. + +## Must-Haves Verification + +| # | Must-Have | Status | Evidence | +|---|-----------|--------|----------| +| 1 | GearImage component with object-contain | PASS | `src/client/components/GearImage.tsx` contains `object-contain` | +| 2 | All 12 gear surfaces use GearImage | PASS | `object-cover` only in GearImage internal, ProfileSection, users avatar | +| 3 | Dominant color background fill | PASS | `imageContainerBg()` helper used in all parent containers | +| 4 | dominantColor field on items, globalItems, threadCandidates | PASS | 3 occurrences of `dominant_color` in schema.ts | +| 5 | Crop fields on all 3 tables | PASS | cropZoom, cropX, cropY on items, globalItems, threadCandidates | +| 6 | Upload endpoints return dominantColor | PASS | Both POST routes return dominantColor | +| 7 | Zod schemas accept new fields | PASS | 3 schemas updated | +| 8 | Zoom+pan editor component | PASS | ImageCropEditor.tsx with react-easy-crop | +| 9 | Editor in ImageUpload | PASS | Shows after upload when onCropChange provided | +| 10 | "Adjust framing" on item detail | PASS | Button renders when image exists | +| 11 | "Adjust framing" on candidate detail | PASS | Button renders when image exists | +| 12 | Backfill migration script | PASS | scripts/backfill-dominant-colors.ts | +| 13 | Build passes | PASS | `bun run build` succeeds | +| 14 | Lint passes | PASS | `bun run lint` — 0 issues | + +## Score: 14/14 + +## Human Verification Items + +1. **Visual quality**: Upload images of various aspect ratios (portrait, landscape, square) and verify letterbox/pillarbox backgrounds look intentional with dominant color fill +2. **Crop editor UX**: Open item detail, click "Adjust framing", verify zoom slider and drag-to-pan work smoothly +3. **Cross-surface consistency**: View the same image on ItemCard, item detail, and candidate card — verify framing is consistent + +## Notes +- Database migration generated but db:push deferred (no database accessible in dev environment). Must run `bun run db:push` before deployment. +- Global item detail "Adjust framing" skipped — no update endpoint exists for global items. +- Pre-existing test failures (311 fails) unrelated to this phase — `setup_items` relation issues in pglite test setup.