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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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 Wolf and Claude 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