diff --git a/CLAUDE.md b/CLAUDE.md index 1c751d4..bb5873a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -145,11 +145,11 @@ This is a fork with UX improvements. Issues are tracked on the Gitea instance ab | 17 | Image Attachments for Filaments | **Open** | | 18 | QR Code Labels for Filaments | **Open** | | 19 | Integration with filamentcolors.xyz | **Open** | -| 20 | Gallery View for Spools (Color Grid) | **Open** | +| 20 | Gallery View for Spools (Color Grid) | ✅ DONE | | 21 | QR Code Version/Complexity Config | **Open** | | 23 | Reporting & Data Export | **Open** | | 24 | NFC/RFID Tag Support | **Open** | -| 25 | Sort Spools by Custom Fields | **Open** | +| 25 | Sort Spools by Custom Fields | ✅ DONE | | 26 | Label Template Enhancements | **Open** | | 27 | QR Scanner Camera Device Selector | **Open** | | 28 | Mobile-Friendly UI / Responsive | **Open** | @@ -158,14 +158,14 @@ This is a fork with UX improvements. Issues are tracked on the Gitea instance ab | 31 | Special Filament Properties | **Open** | | 32 | SpoolType Model (Cardboard/Plastic/Metal) | **Open** | | 34 | Color Swatch Border for Dark Mode | ✅ DONE | -| 35 | Global Search Box | **Open** | -| 36 | Spool-Level Overrides (Color, Price) | **Open** | +| 35 | Global Search Box | ✅ DONE | +| 36 | Spool-Level Overrides (Color, Price) | ✅ DONE | | 37 | Plugin System for Extensions | **Open** | -| 39 | Usage Statistics & Cost Tracking | ⚡ Partial | +| 39 | Usage Statistics & Cost Tracking | ✅ DONE | | 40 | Storage vs Active Spool Status | **Open** | | 41 | Load Cell / Scale Integration | **Open** | -| 42 | Allow Spools Heavier Than Max | **Open** | -| 43 | Show Filament Fields on Spool View | **Open** | +| 42 | Allow Spools Heavier Than Max | ✅ DONE | +| 43 | Show Filament Fields on Spool View | ✅ DONE | | 44 | HomeAssistant Add-On Packaging | **Open** | | 45 | Filament Swatch Card Generator | **Open** | | 46 | Project-Based Spool Grouping | **Open** | @@ -523,13 +523,77 @@ ssh root@192.168.0.5 "/mnt/user/appdata/spoolman2-build/update.sh" --- +### Issue #42 Complete - Allow Spools Heavier Than Max + +Removed weight validation cap that prevented spools from exceeding their theoretical initial weight. + +**Backend:** +- `spoolman/database/spool.py` - Removed `max(..., 0)` clamps from create/update; when remaining > initial, adjusts initial upward +- `spoolman/api/v1/models.py` - Removed `max(..., 0)` from remaining_weight computation + +### Issue #43 Complete - Show Filament Fields on Spool View + +Display filament custom fields on the spool detail page. + +**Frontend:** +- `client/src/pages/spools/show.tsx` - Added `filamentExtraFields` section after spool extra fields + +### Issue #25 Complete - Sort by Custom Fields & Remaining Weight + +**Backend:** +- `spoolman/database/spool.py` - Added `extra.{key}` sort support via outerjoin on SpoolField table + +**Frontend:** +- `client/src/pages/spools/list.tsx` - Added `sorter: true` to weight/length NumberColumns +- `client/src/components/column.tsx` - Changed CustomFieldColumn to sortable with `dataId: extra.{key}` + +### Issue #35 Complete - Global Search Box + +**Backend:** +- `spoolman/api/v1/spool.py` - Added `q` parameter to find endpoint +- `spoolman/database/spool.py` - OR-based search across filament name, material, vendor name, location, lot_nr, comment + +**Frontend:** +- `client/src/pages/spools/list.tsx` - Added `Input.Search` component, passes `q` via meta.queryParams + +### Issue #20 Complete - Gallery View for Spools + +Color grid view for spools with progress bars and material labels. + +**Frontend:** +- `client/src/pages/spools/components/SpoolGallery.tsx` - Grid of color cards with progress bars +- `client/src/pages/spools/list.tsx` - View mode toggle (table/gallery) + +### Issue #36 Complete - Spool-Level Overrides + +Per-spool color override with ColorPicker (price and initial_weight already existed). + +**Backend:** +- `spoolman/database/models.py` - Added `color_hex` field to Spool model +- `spoolman/api/v1/spool.py` - Added `color_hex` to create/update params +- `migrations/versions/2025_01_22_0100-g7h8i9j0k1l2_add_spool_color_hex.py` + +**Frontend:** +- `client/src/pages/spools/create.tsx`, `edit.tsx` - ColorPicker form field +- All display locations updated to prefer `spool.color_hex` over `filament.color_hex` + +### Issue #39 Complete - Usage Statistics & Cost Tracking + +Added cost analytics endpoint and total spent / avg cost per kg stats. + +**Backend:** +- `spoolman/api/v1/other.py` - Added `GET /analytics/cost` endpoint returning total_spent, avg_cost_per_kg, cost_by_material + +**Frontend:** +- `client/src/pages/home/components/QuickStats.tsx` - Added "Total Spent" and "Avg Cost/kg" stat cards +- `client/src/pages/home/components/UsageAnalytics.tsx` - Added cost per material in breakdown cards + +### Bug Fixes + +- **Filament Select Refresh**: Fixed race condition where form value was set before options re-rendered. Uses `pendingFilamentId` state + useEffect. +- **Parse Temps from Comments**: Added regex-based temperature parser button on filament edit page. + ## Known Issues / TODO -### Parse Temperature from Comments -Some filaments have temp info in comment field (e.g., "extrude 190-230 / bed 50-70") but not in the min/max fields. Could add a migration or button to parse and populate. - -### Filament Select Not Refreshing After Inline Creation -When creating a filament via the inline modal on spool create page, the select dropdown doesn't immediately show the new filament with its name (shows ID instead). - ### Issue #7 - 3dfilamentprofiles Integration REMOVED The 3dfilamentprofiles.com website has Vercel bot protection that blocks automated requests. Their GitHub repo (jklewa/filament-profiles-data) only provides sample data (~3 filaments). Since SpoolmanDB already has 6,957+ filaments from major brands, the 3dfp integration was removed rather than maintaining dead code.