Commit Graph
100 Commits
Author SHA1 Message Date
Christian Vidal Wolf 20c4cb1a40 fix: preserve 0 values in badge check 2026-04-10 12:50:15 +02:00
Christian Vidal Wolf 95eb6ab91b feat: add Edit button to history items to modify changes 2026-04-10 12:46:26 +02:00
Christian Vidal Wolf be584600fc feat: add clear X button to all search inputs 2026-04-10 12:39:31 +02:00
Christian Vidal Wolf dbcd6d622f Implement smart merge of synced data to preserve external updates 2026-04-10 12:31:57 +02:00
Christian Vidal Wolf 8849303f58 Fix data overwrite on reload by ignoring duplicates in dropbox-sync 2026-04-10 12:28:48 +02:00
Christian Vidal Wolf 7a5e1a1b26 Fix token definition oversight 2026-04-10 12:25:58 +02:00
Christian Vidal Wolf bdd15cbd33 Show specific critical error message 2026-04-10 12:16:06 +02:00
Christian Vidal Wolf 3c821b83a0 Gracefully handle JWT expired and warn user to re-login 2026-04-10 12:09:49 +02:00
Christian Vidal Wolf db91aeb842 Improve Supabase error reporting for diagnostic purposes 2026-04-10 12:06:16 +02:00
Christian Vidal Wolf ee73b85100 Fix save changes looping issue and authorize all Supabase API calls 2026-04-10 12:03:12 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 a92e136372 fix: update Dropbox file path to correct location
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:51:41 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 1bff4f11a6 fix: use refresh token flow for permanent Dropbox access
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:24:28 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 8e5cc6745a fix: use DROPBOX_ACCESS_TOKEN directly in proxy (skip refresh flow)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 11:20:16 +02:00
Christian Vidal Wolf 1aaf454ba5 fix: use raw fetch for Dropbox API instead of SDK, add better error logging 2026-04-10 11:01:55 +02:00
Christian Vidal Wolf 90e60017da feat: sync Excel data to Supabase on load - detect new Dropbox files automatically 2026-04-10 10:54:50 +02:00
Christian Vidal Wolf 077e78513c fix: use POST with upsert instead of PATCH to handle new products 2026-04-10 10:48:05 +02:00
Christian Vidal Wolf 0139e1de20 fix: add debug logs to handleSaveAll to diagnose save issue 2026-04-10 10:45:11 +02:00
Christian Vidal Wolf bb1af0dbbd fix: correctly track hasUnsavedChanges when only 1 pending change remains 2026-04-10 10:37:40 +02:00
Christian Vidal Wolf 4e6563d38d Move filter icon next to header text in all views 2026-04-10 10:05:59 +02:00
Christian Vidal Wolf 19df2d04e4 Move filter icon closer to header text in ArticleDetails 2026-04-10 10:02:26 +02:00
Christian Vidal Wolf 23f4b508c8 Delete history entry after revert 2026-04-10 09:47:35 +02:00
Christian Vidal Wolf 0cf4f59937 Warn when reverting to original state (no actual changes) 2026-04-10 09:42:04 +02:00
Christian Vidal Wolf 7bf37eb017 style: adjust ASIN column width to fit 10 characters in ProductDescriptions 2026-04-10 09:28:49 +02:00
Christian Vidal Wolf 161e77a76b Set ASIN column width to 90px 2026-04-10 09:25:34 +02:00
Christian Vidal Wolf 0c75e91c4e Reduce ASIN column width to 120px 2026-04-10 09:23:51 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 64a9c40ec3 fix: move session check after all hooks to fix blank page on login
Early conditional return before useEffect/useMemo violated React Rules
of Hooks, causing error #300 (rendered more hooks than previous render)
after login.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-10 08:32:03 +02:00
Christian Vidal Wolf 1339a34bb0 Fix React hooks order - all useState at top 2026-04-10 08:27:36 +02:00
Christian Vidal Wolf 935f3f02ec Add debug logging for session changes 2026-04-10 08:24:58 +02:00
Christian Vidal Wolf 1ef865250a Fix login blank page issue 2026-04-10 08:20:44 +02:00
Christian Vidal Wolf 22dfa30708 Dynamically detect ASIN column from Excel headers 2026-04-09 16:33:05 +02:00
Christian Vidal Wolf 4a6440f58a Detect ASIN column index dynamically from headers 2026-04-09 16:29:54 +02:00
Christian Vidal Wolf 9c73efa8cf Fix ASIN column index (column 33, after Item to root units) 2026-04-09 16:23:25 +02:00
Christian Vidal Wolf db69ada011 Add ASIN column to Product Descriptions 2026-04-09 16:20:44 +02:00
Christian Vidal Wolf 80fff047ab fix: ensure Gemini translates all-caps phrases and maintains casing 2026-04-09 11:05:00 +02:00
Christian Vidal Wolf e773c6c9c4 fix: tighten Gemini prompt to avoid conversational filler 2026-04-09 11:00:12 +02:00
Christian Vidal Wolf 3f3c7eb3b2 feat: add change history and fix description editing focus bug 2026-04-09 10:57:39 +02:00
Christian Vidal Wolf cf851e97c4 Fix: prevent keyboard events from closing edit panel 2026-04-09 10:41:05 +02:00
Christian Vidal Wolf 0b100398e7 Fix: focus textarea after AI generation for manual editing 2026-04-09 10:20:59 +02:00
Christian Vidal Wolf f125572572 Allow any email to register and fix logout blank page bug 2026-04-09 09:58:01 +02:00
Christian Vidal Wolf ec541f1238 feat: simplify Product Descriptions tabs 2026-04-09 09:44:24 +02:00
Christian Vidal Wolf 899016f0a0 feat: add Pending Validation tab showing all pending changes 2026-04-09 09:24:17 +02:00
Christian Vidal Wolf a5c8076e18 feat: always show undo button in DimensionsView 2026-04-09 09:17:11 +02:00
Christian Vidal Wolf 2ea5bf80aa feat: add undo button in DimensionsView for pending changes 2026-04-09 09:13:18 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 1b0b35d3bf feat: show Save button always, disabled when no pending changes
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 09:03:19 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 a7d8dad36e feat: revert individual pending changes from TopBar dropdown
- pendingRows now stores originalData + newData per article so changes
  can be individually reverted to their pre-edit state
- TopBar Save button becomes a split button: left saves all, right
  opens a dropdown listing every pending change with article no + name
- Each row in the dropdown has a Revert button that restores the
  original data locally and removes it from the pending queue
- Dropdown closes automatically when all changes are saved/reverted
  or when clicking outside

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:58:31 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 acc1d06269 feat: manual Save All button in TopBar with pending change tracking
Changes are now queued locally (yellow highlight) and only persisted to
Supabase when the user clicks the Save button in the top-right corner.
The button shows the count of pending changes and a spinner while saving.
EditPanel closes immediately after queuing — no Supabase call per edit.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:45:22 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 c544b9b709 feat: persistent multi-step undo system in TopBar
fix: save all changes to Supabase with reliable upsert

- Replace broken PATCH→POST fallback with single atomic upsert (POST +
  Prefer: resolution=merge-duplicates). The old PATCH returned 200 OK
  with empty body for new articles, causing silent data loss on every
  first save per article.
- Fix getAllSyncedRows pagination: add explicit limit=10000 and Range
  header to bypass Supabase's default 1000-row cap.
- Add fetchWithRetry helper (2 retries on 5xx/network errors).
- handleSaveRow now returns Promise<boolean> and closes EditPanel only
  after a confirmed successful save.
- Add 'error' save status: failed rows turn red (border-l-red-500)
  across ProductDescriptions, ArticleDetails, and PricingView.
- EditPanel shows saving spinner, disables buttons while saving, and
  displays inline error message with "Retry Save" on failure.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-09 08:22:58 +02:00
Christian Vidal Wolf da4673f7c4 feat: resizable columns in ProductDescriptions and ArticleDetails 2026-04-08 20:21:36 +02:00
Christian Vidal Wolf 968547c8c7 feat: persistent multi-step undo system in TopBar 2026-04-08 20:11:00 +02:00
Christian Vidal Wolf 72e653e353 feat: persistent validation visibility in DimensionsView and selection fixes 2026-04-08 20:05:24 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 e24e3e5067 debug: add console logs to trace filter state + stopPropagation on popover
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 19:59:11 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 d3675bba0b fix: resolve column filter checkboxes not responding to clicks
Replace label+hidden-input pattern in ColumnFilterPopover with direct
onClick on div — browsers don't reliably fire onChange for display:none
inputs activated via label click. Also adds missing columnFilters to
useMemo deps in ProductDescriptions and ArticleDetails, and restores
rowStatuses prop wiring in ProductDescriptions.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 19:49:48 +02:00
Christian Vidal WolfandQwen-Coder 71a4897f28 fix: remove rowStatuses prop from ProductDescriptions to fix app crash
The rowStatuses prop was merged from feature branch but is incompatible
with main. Removed it and restored original tbody structure while keeping
the Present/Missing filter fix.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-08 19:32:28 +02:00
Christian Vidal Wolf 0d47f5be33 feat: implement persistence system with visual highlighting and auto-reset on export 2026-04-08 19:30:41 +02:00
Christian Vidal WolfandQwen-Coder 85451a6b31 fix: add parentheses for correct boolean operator precedence in column filter
The missing/present filter was not working due to operator precedence.
Added explicit parentheses to ensure correct evaluation.

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-08 19:27:29 +02:00
Christian Vidal WolfandQwen-Coder 20a0c2d786 feat: restrict description column filters to Present/Missing only
Long DE, Long EN, Short DE, and Short EN columns now only show
Present/Missing filter options instead of all unique values

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-04-08 17:11:27 +02:00
Christian Vidal Wolf 976f38eef8 feat: final Select All styling and sync to main 2026-04-08 17:03:00 +02:00
Christian Vidal Wolf 29f3a469fe test: change Clear to BORRAR to verify user view 2026-04-08 17:02:35 +02:00
Christian Vidal Wolf f3f9f1547f style: move Select All to bottom bar of ColumnFilterPopover 2026-04-08 16:59:39 +02:00
Christian Vidal Wolf 89aa222470 feat: standardize ColumnFilterPopover and add SELECT ALL to all views/tabs 2026-04-08 16:56:43 +02:00
Christian Vidal Wolf 786c66fd87 feat: add Select All to column filters and refine views 2026-04-08 16:50:53 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 71af4e1915 feat: add Classification column and Excel-style column filters to Pricing & Units tab
- Added Classification column next to Line with color-coded badges (Core=blue, OOC=amber)
- Added Excel-style filter icons on Article Name (text search), Line, and Classification headers
- Filter icons appear on hover; turn blue when active
- Multi-select popover for Line and Classification; free-text popover for Article Name
- Filters work additively alongside the existing global search bar
- ArticleDetails: removed Tariff/Barcode/Origin columns and tab to simplify the view

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 16:37:40 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 04d198ea59 feat: add Excel-like column filters and License/Classification columns to Product Descriptions
- Added per-column filter popover (Excel-style) with search, multi-select checkboxes, and clear button
- Filter icon appears on hover for each column header; turns blue when active
- "Clear All Column Filters" button appears in toolbar when any column filter is active
- Added License and Classification columns to the table with OOC badge styling

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 16:18:24 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 8fa001c6ed feat: short description AI targeting 30% length + checkbox sync for near-duplicate dimensions
- EditPanel: short description prompts now target ~30% of the long description character count, preserving key highlights as flowing prose
- DimensionsView: near-duplicate clusters expanded view replaced with a flat checkbox list (SKU + name + current dims per row), a target-dimension dropdown, and a "Sync N selected" button that unifies inner dimensions across selected products via ConfirmModal

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-08 16:11:37 +02:00
Christian Vidal Wolf 24042a6aed feat: reorganize tabs, add Article Details, and enhance filters/search 2026-04-08 16:10:14 +02:00
Christian Vidal Wolf 935cd5b510 feat: add search functionality to Matrix View 2026-04-07 13:40:50 +02:00
Christian Vidal Wolf ec1b506341 feat: include article details (DE/EN) in completeness check and make them editable 2026-04-07 13:38:21 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 32c392d470 chore: update package-lock.json peer dependency flags
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 12:42:03 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 38466b3876 feat: add Pricing & Units tab for Level error monitoring
New tab shows all products with missing UVP/SRP pricing or invalid
container units (40'HC/HQ = 0 or 1, missing Units/Outer). Price
fields are inline-editable with Supabase sync. Columns are detected
dynamically from Excel headers so future SRP countries (e.g. Poland)
appear automatically.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 11:23:34 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 d48e2cb0ff fix: tighten near-duplicate detection to <1 cm absolute difference per axis
Replaces percentage-based threshold (15%) with strict absolute tolerance:
two dimension groups are flagged only if all three sorted dimensions
differ by less than 1 cm. Targets likely data entry typos.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 10:56:58 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 9753958761 fix: replace volume-based similarity with per-dimension comparison for near-duplicate detection
Compares each sorted dimension individually (max relative diff ≤15% per axis)
instead of total cubic volume. Catches cases like 29x15x20 vs 26x16x19.5
that volume comparison misses.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 10:51:10 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 f44e4314e1 feat: detect near-duplicate dimension groups within 5% volume difference
Groups with different inner dimensions but similar cubic volume (≤5% diff)
are flagged as possible data entry errors in a dedicated UI section.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 10:45:28 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 efbcd952b7 fix: normalize dimension key ordering for consistent grouping
Products with identical dimensions in different order (e.g. 29x10x15 vs 10x29x15) are now grouped together by sorting dimension values into a canonical form.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-07 10:37:16 +02:00
Christian Vidal Wolf 16de3b3a6e feat: implement English to German translation for long descriptions 2026-04-07 08:35:04 +02:00
Christian Vidal Wolf 9d4d20d425 Add AGENTS.md with developer guidelines 2026-03-29 19:05:02 +02:00
Christian Vidal Wolf 3b629bfb96 Add confirmation to Gemini actions in EditPanel 2026-03-29 18:29:11 +02:00
Christian Vidal Wolf 99825af08c Implement premium Confirmation Modal for all data-modifying actions 2026-03-29 18:26:20 +02:00
Christian Vidal Wolf 7a86a8e64b Reposition granular sync buttons to the left of the values in Dimensions view 2026-03-29 17:54:22 +02:00
Christian Vidal Wolf c67fcadb48 Enhance Undo system with 5-step history and TopBar badge 2026-03-29 17:50:31 +02:00
Christian Vidal Wolf 5c9d101349 Implement granular synchronization for Outer Box, Units, and MOQ separately 2026-03-29 17:43:57 +02:00
Christian Vidal Wolf 65a847e789 Allow choosing which product to sync from in Dimensions view 2026-03-29 17:41:03 +02:00
Christian Vidal Wolf 8a4d0c5cfa Add persistent Undo button to TopBar 2026-03-29 17:37:58 +02:00
Christian Vidal Wolf e498325975 Implement Undo system for AI and bulk actions 2026-03-29 17:35:07 +02:00
Christian Vidal Wolf 3db2bc0dae Add Dimensions tab for packaging and MOQ consistency check 2026-03-29 17:30:04 +02:00
Christian Vidal Wolf 2ed90234a7 Fix date columns showing numbers instead of dates 2026-03-29 17:17:50 +02:00
Christian Vidal WolfandQwen-Coder fac448153f feat: move Matrix tab to first position
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 17:13:30 +02:00
Christian Vidal Wolf 94745f027f Remove Upload/Reload tab from sidebar 2026-03-29 17:10:27 +02:00
Christian Vidal WolfandQwen-Coder 128431aff4 feat: change page title to Craze Data Check
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 17:08:10 +02:00
Christian Vidal WolfandClaude Sonnet 4.6 3696b38666 fix: force 2 decimal places for NW/GW/weight/kg columns before exclusion logic
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:15:25 +02:00
Christian Vidal Wolf 27a161bfbb fix: correctly format weight and kg columns to 2 decimals 2026-03-29 14:55:30 +02:00
Christian Vidal WolfandQwen-Coder 912fb16cb0 fix: format Article NW (kg) and weight columns to 2 decimal places
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-29 14:53:17 +02:00
Christian Vidal Wolf 034640c869 feat: format numeric and price fields to 2 decimal places 2026-03-29 14:46:05 +02:00
Christian Vidal Wolf dd72b927c7 feat: update app logo to CRAZE SCAN 2026-03-29 14:38:57 +02:00
christian.vidal 1a6243504e style: maximize logo size and header for 2x readability 2026-03-27 18:21:56 +01:00
christian.vidal 14dbfc970f style: enlarge logo and apply modern effects for premium look 2026-03-27 18:20:46 +01:00
christian.vidal 7fad2fbce1 style: use external logo URL and maintain navy theme 2026-03-27 18:19:45 +01:00
christian.vidal 1f2bc2c4d4 style: integrate new logo and update theme to deep navy 2026-03-27 18:18:06 +01:00
christian.vidalandClaude Sonnet 4.6 b88ca57c95 feat(auth): add sign up flow with email domain validation and password confirm
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 17:54:31 +01:00
christian.vidalandClaude Sonnet 4.6 c1f809dfdb fix(auth): change allowed domain from @craze.de to @craze-group.com
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 17:51:20 +01:00
christian.vidalandClaude Sonnet 4.6 eeb6711b69 feat(auth): add email/password login restricted to @craze.de accounts
- src/lib/auth.ts: signIn/signOut/getStoredSession via Supabase Auth REST API
- src/components/LoginPage.tsx: login form with domain validation UI
- src/components/TopBar.tsx: show logged-in user email + sign out button
- src/App.tsx: gate entire app behind auth — shows LoginPage if no session

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-27 17:49:10 +01:00