Commit Graph
121 Commits
Author SHA1 Message Date
makiolajandClaude Opus 4.6 a9f802ab68 docs(07-02): complete weight unit UI wiring plan
- Created 07-02-SUMMARY.md with task commits and deviations
- Updated STATE.md: Phase 7 complete, progress 100%
- Updated ROADMAP.md: Phase 07 marked complete
- Marked UNIT-01 requirement complete in REQUIREMENTS.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:25:22 +01:00
makiolajandClaude Opus 4.6 faa437896f feat(07-02): add weight unit toggle and wire all formatWeight call sites
- Add segmented g/oz/lb/kg toggle to TotalsBar with settings persistence
- Pass unit parameter to all 8 formatWeight call sites across components and routes
- Import useWeightUnit hook in ItemCard, CandidateCard, CategoryHeader, SetupCard, ItemPicker, Dashboard, SetupDetail

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:23:19 +01:00
makiolajandClaude Opus 4.6 1b0b4d0368 docs(07-01): complete weight unit core plan
- SUMMARY.md with TDD results and 21-test coverage
- STATE.md updated to Plan 2 of 2, 17% progress
- ROADMAP.md marks 07-01 complete (1/2 plans)
- REQUIREMENTS.md marks UNIT-02, UNIT-03 complete

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:19:10 +01:00
makiolajandClaude Opus 4.6 ada37916b1 feat(07-01): create useWeightUnit convenience hook
- Wraps useSetting("weightUnit") with typed WeightUnit return
- Validates stored value against known units (g, oz, lb, kg)
- Defaults to "g" when no setting exists (backward compatible)
- Fix config.json formatting (tabs per biome config)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:16:11 +01:00
makiolajandClaude Opus 4.6 6cac0a32bc feat(07-01): implement formatWeight with WeightUnit parameter
- Export WeightUnit type ("g" | "oz" | "lb" | "kg")
- Add conversion constants (GRAMS_PER_OZ, GRAMS_PER_LB, GRAMS_PER_KG)
- Switch-based formatting: g=0dp, oz=1dp, lb=2dp, kg=2dp
- Default parameter "g" preserves backward compatibility
- formatPrice left untouched
- All 21 tests pass

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:15:32 +01:00
makiolajandClaude Opus 4.6 431c179814 test(07-01): add failing tests for formatWeight unit conversion
- Tests for all 4 units (g, oz, lb, kg) with known gram values
- Null and undefined handling for each unit
- Default parameter backward compatibility
- Zero and precision edge cases
- 11 pass (existing behavior), 10 fail (new unit conversion)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-16 12:15:09 +01:00
makiolaj f1f63eced9 docs(07): create phase plan for weight unit selection 2026-03-16 12:10:22 +01:00
makiolaj 0b30d5a260 docs(07): add validation strategy 2026-03-16 12:04:08 +01:00
makiolaj a555267942 docs(7): research phase domain 2026-03-16 12:01:21 +01:00
makiolaj 421a684845 docs(state): record phase 7 context session 2026-03-16 11:56:52 +01:00
makiolaj 7e6ddf53b1 docs(07): capture phase context 2026-03-16 11:56:25 +01:00
makiolaj 7d989b1612 docs: create milestone v1.2 roadmap (3 phases) 2026-03-16 11:50:43 +01:00
makiolaj 75d4ec2b05 docs: define milestone v1.2 requirements 2026-03-16 11:47:05 +01:00
makiolaj 79457053b3 docs: complete project research 2026-03-16 11:39:16 +01:00
makiolaj 1324018989 docs: start milestone v1.2 Collection Power-Ups 2026-03-16 11:23:57 +01:00
makiolajandClaude Opus 4.6 94ebd84cc7 refactor: move setups list into collection page as third tab
CI / ci (push) Successful in 13s
Setups now lives alongside My Gear and Planning under /collection?tab=setups
instead of its own /setups route. Dashboard card updated to link to the new
tab. Setup detail pages (/setups/:id) remain unchanged.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.2.0
2026-03-16 00:07:48 +01:00
makiolajandClaude Opus 4.6 5938a686c7 feat: add package icon as favicon and in top bar title
CI / ci (push) Successful in 12s
Add Lucide package icon as SVG favicon (white stroke) and display it
next to the GearBox title in the TotalsBar.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:57:43 +01:00
makiolajandClaude Opus 4.6 9bcdcc7168 style: replace blue accent with gray and mute card badge colors
Switch all interactive UI elements (buttons, focus rings, active tabs,
FAB, links, spinners) from blue to gray to match icon colors for a
more cohesive look. Mute card badge text colors to pastels (blue-400,
green-500, purple-500) to keep the focus on card content.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 22:42:38 +01:00
makiolajandClaude Opus 4.6 628907bb20 docs: add user-facing README and update compose for production
CI / ci (push) Successful in 20s
Add README with Docker setup instructions for self-hosting. Update
docker-compose.yml to use the pre-built registry image instead of
local build, and add a healthcheck against /api/health.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-15 21:53:29 +01:00
makiolajandClaude Opus 4.6 891bb248c8 fix: use bun-sqlite migrator instead of drizzle-kit push in Docker
CI / ci (push) Successful in 21s
drizzle-kit push depends on better-sqlite3 which isn't supported in
Bun, causing migrations to fail and the server to crash-loop in prod.
Replace with drizzle-orm/bun-sqlite/migrator that applies the existing
SQL migration files using the native bun:sqlite driver.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
v1.1.4
2026-03-15 21:30:39 +01:00
makiolajandClaude Opus 4.6 81f89fd14e fix: install docker-cli on dind runner for image build
CI / ci (push) Successful in 12s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.1.3 v1.1.2
2026-03-15 19:53:41 +01:00
makiolajandClaude Opus 4.6 b496462df5 chore: auto-fix Biome formatting and configure lint rules
CI / ci (push) Successful in 15s
Run biome check --write --unsafe to fix tabs, import ordering, and
non-null assertions across entire codebase. Disable a11y rules not
applicable to this single-user app. Exclude auto-generated routeTree.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.1.1
2026-03-15 19:51:34 +01:00
makiolajandClaude Opus 4.6 4d0452b7b3 fix: handle better-sqlite3 native build in Docker and skip in CI
CI / ci (push) Failing after 8s
Install python3/make/g++ in Dockerfile deps stage for drizzle-kit's
better-sqlite3 dependency. Use --ignore-scripts in CI workflows since
lint, test, and build don't need the native module.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 19:41:55 +01:00
makiolajandClaude Opus 4.6 8ec96b9a6c fix: use correct branch name "Develop" in CI workflow triggers
CI / ci (push) Failing after 29s
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 19:39:54 +01:00
makiolajandClaude Opus 4.6 48985b5eb2 feat: add Docker deployment and Gitea Actions CI/CD
Add multi-stage Dockerfile, docker-compose with persistent volumes,
and Gitea Actions workflows for CI (lint/test/build) and releases
(tag, Docker image push, changelog). Support DATABASE_PATH env var
for configurable SQLite location to enable proper volume mounting.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 19:36:23 +01:00
makiolajandClaude Opus 4.6 37c4272c08 chore: add CLAUDE.md, initial Drizzle migration, and update gitignore
Add project instructions for Claude Code, the initial database migration,
and ignore the .claude/ local config directory.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:57:40 +01:00
makiolajandClaude Opus 4.6 ad941ae281 chore: disable research workflow step in planning config
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:48:32 +01:00
makiolajandClaude Opus 4.6 87fe94037e feat: add external link confirmation dialog for product URLs
Show an external link icon on ItemCard and CandidateCard that opens a
confirmation dialog before navigating to product URLs.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:48:27 +01:00
makiolajandClaude Opus 4.6 7c3740fc72 refactor: replace remaining emojis with Lucide icons
Replace all raw emoji characters in dashboard cards, empty states,
and onboarding wizard with LucideIcon components for visual consistency.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:47:50 +01:00
makiolajandClaude Opus 4.6 407fa45280 chore: complete v1.1 milestone — Fixes & Polish
Archive v1.1 artifacts (roadmap, requirements, phases) to milestones/.
Evolve PROJECT.md with shipped requirements and new key decisions.
Reorganize ROADMAP.md with collapsed milestone groupings.
Update retrospective with v1.1 lessons.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v1.1
2026-03-15 18:16:27 +01:00
makiolaj 414f2b726e docs: capture todo - Replace planning category filter select with icon-aware dropdown 2026-03-15 18:09:55 +01:00
makiolaj dbd217b9e5 docs(phase-6): complete phase execution 2026-03-15 18:04:26 +01:00
makiolajandClaude Opus 4.6 2b8061d958 docs(06-03): complete display component icon migration plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 18:00:45 +01:00
makiolajandClaude Opus 4.6 ce4654b507 docs(06-02): complete category icon UI components plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:59:16 +01:00
makiolajandClaude Opus 4.6 9fcb07c96b chore(06-03): update auto-generated route tree and clean up emoji references
- Route tree regenerated after icon migration changes
- Old EmojiPicker.tsx and emojiData.ts files removed (were untracked)
- Zero emoji references remain in src/

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:58:57 +01:00
makiolajandClaude Opus 4.6 570bcea5c9 feat(06-02): replace EmojiPicker with IconPicker across all category components
- CategoryPicker shows LucideIcon prefix and uses IconPicker for inline create
- CategoryHeader displays LucideIcon in view mode and IconPicker in edit mode
- OnboardingWizard uses IconPicker for category creation step
- CreateThreadModal drops emoji from category select options
- Fixed categoryEmoji -> categoryIcon in routes and useCategories hook

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:57:56 +01:00
makiolajandClaude Opus 4.6 615c8944c4 feat(06-03): update display components to use categoryIcon with LucideIcon
- Rename categoryEmoji to categoryIcon in ItemCard, CandidateCard, ThreadCard, ItemPicker
- Import and render LucideIcon at appropriate sizes (36px placeholder, 14-16px badges)
- Update hook interfaces to match server API (categoryIcon instead of categoryEmoji)
- Rename iconData.ts to iconData.tsx (contains JSX)
- Update useCategories mutation type to use icon instead of emoji

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:57:21 +01:00
makiolajandClaude Opus 4.6 59d1c891f9 feat(06-02): create IconPicker component with search and group tabs
- Portal-based popover with Lucide icon grid organized by 8 groups
- Search filters icons by name and keywords across all groups
- Click-outside and Escape key close the popover
- Trigger button displays selected icon or "+" placeholder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:53:55 +01:00
makiolajandClaude Opus 4.6 7d4777a4a4 docs(06-01): complete category icon data layer plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:52:18 +01:00
makiolajandClaude Opus 4.6 fca1eb7d34 feat(06-01): install lucide-react and create icon data with LucideIcon component
- Install lucide-react v0.577.0
- Create iconData.ts with 119 curated icons across 8 groups
- Add LucideIcon component with kebab-to-PascalCase conversion and fallback
- Export EMOJI_TO_ICON_MAP for migration compatibility
- Build succeeds with new dependency

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:49:56 +01:00
makiolajandClaude Opus 4.6 546dff151b feat(06-01): migrate categories from emoji to Lucide icon field
- Rename emoji column to icon in schema, Zod schemas, and all services
- Add Drizzle migration with emoji-to-icon data conversion
- Update test helper, seed, and all test files for icon field
- All 87 tests pass with new icon-based schema

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:48:23 +01:00
makiolaj 78e38df27a docs(06-category-icons): create phase plan 2026-03-15 17:42:30 +01:00
makiolaj 5bd7d45a99 docs(state): record phase 6 context session 2026-03-15 17:37:03 +01:00
makiolaj 0c73427671 docs(06): capture phase context 2026-03-15 17:36:55 +01:00
makiolaj 28ceb3c6ef docs(phase-5): complete phase execution 2026-03-15 17:18:45 +01:00
makiolajandClaude Opus 4.6 da4f46a852 docs(05-02): complete image placeholders and thumbnails plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:15:53 +01:00
makiolajandClaude Opus 4.6 acf34c33d9 feat(05-02): add always-visible 4:3 image area with placeholders to ItemCard and CandidateCard
- Replace conditional image rendering with always-present 4:3 aspect ratio area
- Show category emoji centered on gray background when no image exists
- Ensures consistent card heights across grid layouts

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:14:20 +01:00
makiolajandClaude Opus 4.6 036d8ac183 docs(05-01): complete image display fix and hero area plan
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:12:54 +01:00
makiolajandClaude Opus 4.6 3243be433f feat(05-01): redesign ImageUpload as hero area and move to top of forms
- Full-width 4:3 aspect ratio hero image area with rounded corners
- Placeholder state: gray background with ImagePlus icon and helper text
- Preview state: object-cover image with circular X remove button
- Upload state: semi-transparent spinner overlay
- Entire area clickable to upload/replace image
- Moved ImageUpload to first element in both ItemForm and CandidateForm
- Removed redundant "Image" label wrappers

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:11:18 +01:00
makiolajandClaude Opus 4.6 8c0529cd60 fix(05-01): add imageFilename to Zod validation schemas
- Root cause: Zod schemas for createItem and createCandidate did not
  include imageFilename field, so @hono/zod-validator silently stripped
  it from validated payloads before reaching the service layer
- Images uploaded successfully but filename was never persisted to DB
- Added imageFilename as optional string to both createItemSchema and
  createCandidateSchema

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 17:09:59 +01:00