Commit Graph
114 Commits
Author SHA1 Message Date
Christian Vidal WolfandClaude Sonnet 4.6 eadbaf3492 Feat: add hover tooltip on TOTALS row in Weekly Sales with WoW and YoY comparison
Shows previous week and same week prior year values (Units, Revenue, Ads Spend, GV) with % change indicators when hovering any week cell in the TOTALS row.

Co-Authored-By: Claude Sonnet 4.6 (1M context) <noreply@anthropic.com>
2026-04-27 11:22:53 +02:00
Christian Vidal Wolf 117aa0626f Fix: implement definitive revenue integrity filter with ASIN validation and strict marketplace whitelist 2026-04-20 13:19:14 +02:00
Christian Vidal Wolf 862b687835 Fix: implemented top-level UI fail-safe to correctly filter out marketing spend and ensure Dashboard totals match Dropbox 1.87M 2026-04-20 13:12:55 +02:00
Christian Vidal Wolf aa4a916c5d fix: Restore missing top50Ranking2025 definition 2026-04-17 08:14:50 +02:00
Christian Vidal Wolf 5088e04d5f fix: Define missing filteredBsrData to resolve critical ReferenceError 2026-04-17 08:12:18 +02:00
Christian Vidal Wolf 73625526ed fix: exhaustive zero-spread safety audit and render logging 2026-04-16 12:18:52 +02:00
Christian Vidal Wolf fbb6c75197 perf: disable StrictMode and optimize App calculations to handle 120k+ rows 2026-04-16 12:09:52 +02:00
Christian Vidal Wolf 630941c96a fix: resolve white screen by removing stack-unfriendly spread operators and adding diagnostic logs 2026-04-16 12:02:49 +02:00
Christian Vidal WolfandQwen-Coder 19f1137a30 feat: add stock, vendor and buybox badges to Top Movers table
- Added StockBadge, VendorStockBadge and BuyBoxWarningBadge to TopMovers component
- Updated Dashboard to pass stockMap, vendorStockMap, buyBoxLostMap and top50Mode props
- Updated App.tsx to pass the required maps to Dashboard
- Table now shows 3 new columns: Stock (GMBH), Vendor (Amazon Warehouse), and Buy Box status

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-16 15:05:11 +01:00
Christian Vidal WolfandQwen-Coder 167273e659 fix: Top Movers table now responds to dashboard filters
Changed rawData prop from rawData to ytdFilteredData so the Top Movers
component respects all active filters (customer, year, month, week,
product line, SKU, title, ASIN, stock)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-16 14:57:09 +01:00
Christian Vidal Wolf b304e0ddb8 fix: resolve maximum call stack size exceeded error and optimize master table 2026-03-16 13:19:21 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 777a01e417 fix: use all-country ads for MKT tab to match Excel file total
filteredAdsData applies PAN_EU default when no marketplace is selected,
cutting UK/other spend and showing 118k instead of the full 151k.
mktAdsData skips the PAN_EU restriction: no customer filter = all
countries, still respects explicit customer/year/week selections.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 16:52:06 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 657009a7ba feat: wire MKT tab to top-level filters and remove internal category filter
MktDataView now receives filteredData/filteredAdsData so the global
FilterBar controls the tab's data. Removed the local "All Categories"
dropdown that previously sat next to the Include COGS toggle.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-12 14:35:37 +01:00
Christian Vidal WolfandQwen-Coder 12fb15cae3 style: rename MKT tab from 'MKT (preview)' to 'MKT'
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-11 13:20:05 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 49498c5c51 feat: wire MKT tab to real data sources
Replace all mock data in the Profitability Dashboard with live data:
- Add 3 new API routes (fetch-deals, fetch-promos, fetch-chargebacks) proxying Dropbox Excel files
- MktDataView now accepts rawData/adsData props and fetches+parses the 3 new files on mount
- SELL OUT and units aggregated globally across all marketplaces from rawData
- PPC Spend aggregated globally from adsData; ACoS calculated as spend/sales
- Deals (col A→C), Promos (col E→K), Chargebacks (col AN→B) parsed and summed per ASIN
- Category filter populated from product line metadata
- Loading skeleton shown while files are fetching

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 12:34:07 +01:00
Christian Vidal WolfandQwen-Coder ba69375dbe ui: rename MKT tab to MKT (preview)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-11 10:25:57 +01:00
Christian Vidal Wolf 455cd8ed08 feat: add MKT tab and integrate profitability dashboard 2026-03-11 09:27:57 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 dcf77cad2d perf: make filter dropdowns feel instant with useDeferredValue
Use React's useDeferredValue to decouple UI responsiveness from
expensive data reprocessing. Checkboxes now update immediately on
click; filterData/filterAdsData/filterBsrData and all downstream
useMemos run as a low-priority background pass. Added local optimistic
state in MultiSelectDropdown as a belt-and-suspenders layer.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-11 09:02:24 +01:00
Christian Vidal WolfandQwen-Coder 8e907f1dff refactor: remove Movers tab (table now integrated in Dashboard)
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-10 14:09:39 +01:00
Christian Vidal Wolf cefbc18433 fix: simplify green/red logic for inverted metrics in experiments 2026-03-10 14:07:43 +01:00
Christian Vidal Wolf c15642d62d feat: add Detail Level BSR metric to experiments analysis 2026-03-10 13:58:44 +01:00
Christian Vidal WolfandQwen-Coder e118d43b3d rename Vendor tab to BSR
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-10 13:36:21 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 3e3975cd2b feat: add BSR vs Units correlation chart to Vendor tab
New BSRUnitsCorrelationChart component added to the Vendor tab showing:
- Per-marketplace tabs (DE, ES, FR, IT, UK) with market accent colors
- Dual-axis combo chart: bars (units sold, right axis) + line (BSR rank, left axis)
- Inverted BSR axis by default (lower rank = top) with toggle to flip
- Pearson r correlation calculated and displayed with strength interpretation
- Wired to existing combinedAdsData (filtered) and filteredBsrData

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-09 10:58:01 +01:00
Christian Vidal Wolf ad1695d360 fix(ui): make Sync button smaller and more subtle in header 2026-03-03 11:50:07 +01:00
Christian Vidal Wolf 56d07ca459 fix: remove Upload button from header and clean unused imports
All data sources are linked via Dropbox, manual upload not needed.
2026-03-03 11:33:27 +01:00
Christian Vidal WolfandQwen-Coder 2814d68716 feat: mostrar detalles del producto en Vendor tab cuando hay un solo ASIN
- Agregar tarjeta con SKU, ASIN y título al inicio de los gráficos
- Incluir Buy Box Warning Badge si el producto tiene issues
- Solo se muestra cuando hay un único ASIN seleccionado

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-03 11:21:14 +01:00
Christian Vidal WolfandClaude Sonnet 4.6 32a7de8aea feat: remove vendor CSV upload button from data modal
All vendor files are linked via Dropbox, making manual upload unnecessary.
Removes the Upload Vendor CSV button, handleVendorUpload handler, and processVendorCSV import.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-03 11:19:05 +01:00
Christian Vidal Wolf 98ba0d1708 feat: sync vendor tab filters with global header filters 2026-03-03 10:52:35 +01:00
christian.vidalandClaude Sonnet 4.6 ce13d17eda fix(vendor): pass bsrData prop to VendorDataView - resolves black screen
VendorDataView was refactored to receive BSR data as a prop but App.tsx
was not updated to pass it, causing the component to crash on undefined
and show a blank screen. Also fixes supabase.ts type errors and removes
dead code.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-02 18:32:38 +01:00
Christian Vidal Wolf 243c44c7f7 feat: replace Vendor tab with BSR tracker 2026-03-02 15:22:12 +01:00
Christian Vidal Wolf bd85229def feat(ui): remove experimental Gap Report tab and component from navigation 2026-02-26 08:15:12 +01:00
christian.vidal 583bc07dba feat: add Market Gap Report - top 5 DE products not sold in ES 2026-02-25 19:17:07 +01:00
Christian Vidal Wolf 1edfd97ed1 feat(ui): exclude #N/D and Unassigned from product line filter options 2026-02-25 12:47:07 +01:00
Christian Vidal Wolf dc4db269ee feat(ui): exclude N/D from product line filter options 2026-02-25 12:44:51 +01:00
Christian Vidal WolfandClaude Opus 4.6 24df5935cc feat: rebuild Experiments tab with Difference-in-Differences analysis and Bayesian verdicts
Replace the basic CRUD experiment tracker with a scientifically rigorous A/B testing system:

- Add DiD analysis engine (services/experimentAnalysis.ts) that computes treatment vs control
  group comparisons across 7 metrics (units, sessions, CVR, CTR, ROAS, revenue, ACOS)
- Implement Bayesian verdict system (Winner/Loser/Inconclusive) using posterior probability
  with normal CDF approximation (Abramowitz & Stegun erf, no external deps)
- Build counterfactual time series for trend charts (actual vs estimated without change)
- Rewrite ExperimentsView as single component with 3 inline sub-views (list, detail, create)
  replacing the previous modal-based ExperimentDetail and ExperimentForm
- Add control group support, change annotations (before→after diffs), and SEO experiment type
- New types: ExperimentChangeAnnotation, DiDMetricResult, DifferenceInDifferencesResult,
  ExperimentVerdict
- Simplify App.tsx by removing experiment modal state (5 useState hooks eliminated)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-23 15:42:40 +01:00
Christian Vidal Wolf 09cfc1e6a8 feat: inject unfiltered ad data into experiments & deploy comprehensive KPI summary view 2026-02-21 22:56:37 +01:00
Christian Vidal Wolf 249dc0c749 fix: resolve LINE level experiments to individual ASINs using salesData so calculation works for product lines 2026-02-21 19:26:45 +01:00
Christian Vidal Wolf d78a88afe1 feat: complete experiments tab analytics optimization with modular kpis and sparklines 2026-02-21 15:31:02 +01:00
Christian Vidal WolfandQwen-Coder d535004a29 Optimize app loading and fix product lines in experiments
Performance improvements:
- Fetch traffic, stock, vendor stock, buybox, and experiments data in parallel using Promise.all
- Reduces initial loading time significantly
- Non-blocking background fetches after sales data loads

Bug fixes:
- Pass availableLines from App.tsx to ExperimentForm as prop
- Remove localStorage dependency for product lines
- Product lines now correctly populated from rawData

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-21 09:25:15 +01:00
Christian Vidal WolfandQwen-Coder 46d87127c8 Add product line targeting for experiments
- Add option to target entire product line instead of specific ASINs
- Support pasting multiple ASINs separated by spaces OR commas
- Add ASIN format validation (9-10 alphanumeric characters)
- Load available product lines from cached sales data
- Add handleCreateExperimentForLine function in App.tsx
- Update ExperimentForm with target type selector (ASIN vs Line)

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-21 00:40:30 +01:00
Christian Vidal WolfandQwen-Coder a21c0d532c Fix TypeScript errors in experiments feature
- Add experimentMap/onOpenExperiment props to WeeklyRow component
- Export VendorDailyRow type from supabase.ts
- Fix type errors in experiments.ts (unknown[] to string[])
- Add type annotation for allAsins in App.tsx

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-20 19:39:56 +01:00
Christian Vidal WolfandQwen-Coder f93d92da0b Add complete Experiments tracking system
New Features:
- Experiments tab with full CRUD operations
- Create experiments by ASIN or product line groups
- Track pricing, advertising, content, and promotion experiments
- Performance analytics with baseline vs experiment comparison
- Visual experiment badges in Weekly Sales grid
- Experiment detail view with metrics and learnings

Technical Changes:
- Add Supabase experiments table migration
- New services/experiments.ts for CRUD + calculations
- New components: ExperimentsView, ExperimentDetail, ExperimentForm, ExperimentBadge
- Integrate experiment indicators in WeeklyGrid
- Add navigation tab (desktop + mobile)
- Type definitions in types.ts

Usage:
1. Run SQL migration in Supabase
2. Navigate to Experiments tab
3. Create experiments with ASINs, dates, hypothesis
4. View performance lift after completion
5. See active experiments marked in Weekly Sales

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-02-20 19:31:44 +01:00
Christian Vidal Wolf 85c789bf52 fix: resolve vendor data upload error by implementing client-side parsing and sequential batching 2026-02-20 13:32:26 +01:00
Christian Vidal WolfandClaude Opus 4.6 a8258398f7 fix: add Upload button to header to open data source modal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:26:39 +01:00
Christian Vidal WolfandClaude Opus 4.6 2bce0a839b feat: add Supabase vendor data integration (BSR, ratings, buy box)
- Create vendor_daily_data table schema and Supabase client service
- Add upload API route for Vendor Central CSV parsing and upsert
- Add VendorDataView with BSR trend, ratings, and buy box charts
- Integrate new Vendor tab into app navigation (desktop + mobile)
- Add vendor CSV upload card to FileUpload modal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-20 13:19:25 +01:00
Christian Vidal WolfandClaude Opus 4.6 9895545910 feat: full mobile responsive optimization for Android/iPhone
- Add bottom navigation bar (6 tabs) for mobile, hidden on desktop
- Compact header with smaller logo and reduced padding on mobile
- Collapsible filter bar with active filter count badge on mobile
- Bottom-sheet style dropdowns with overlay and larger touch targets
- Fullscreen AI chat on mobile, floating window on desktop
- Responsive dashboard cards with always-visible expand button
- Smaller table text and touch-friendly scroll on all data grids
- iPhone safe-area support and thinner scrollbars on mobile

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-16 09:27:46 +01:00
Christian Vidal Wolf d5bcbeda1a Fix GRID tab empty table regression by correcting filter logic and prop passing 2026-02-09 12:05:03 +01:00
Christian Vidal Wolf 62d4903566 feat: implement bulk search for ASINs/SKUs in DataGrid 2026-02-06 09:22:24 +01:00
Christian Vidal Wolf 9f9556af2a debug: Add Spain-specific sheet fallbacks and expose Buy Box data to window.debugBuyBox 2026-02-05 08:52:49 +01:00
Christian Vidal Wolf 09e06bad16 feat: Automate Buy Box tracker sync from Dropbox and improve parsing robustness 2026-02-05 08:39:39 +01:00