DATA FIXES:
- Dashboard insights now fully dynamic per date range
- Revenue/orders/newcust/AOV trend (splits data in half, compares)
- Channel concentration % computed from filtered data
- Repeat revenue % with date-range label
- All insights adapt when user changes date filter/preset
- Offer page charts now load from API (not hardcoded arrays)
- Revenue chart, new customer chart, channel donut = live data
- Hero stats (-84%, -42%, 85%) computed dynamically from API
- ROI calculator AOV pulled from latest year's actual data
REMAINING AUDIT FIXES:
- Fix#4: 'Built by' section on offer page (name, bio, contact)
- Fix#9: Before/After comparison block on homepage
- Side-by-side: current JV PDP flaws vs AI engine output
- 8 specific ✗/✓ comparison points
- Fix#6: Before/after serves as instant proof (no 90s wait)
All 10 audit fixes now implemented.
- Added PostgreSQL 16 Alpine service to Docker Swarm stack
- db.py: schema for 17 tables, auto-seed from jv_data.json on first boot
- /api/dashboard/data?start=&end= — server-side SQL filtering
All Time: 0.43s (was 4MB JSON download stuck loading)
Filtered (12mo): 0.20s with ~90% less data transferred
- Dashboard HTML patched: calls API instead of static JSON
- Integer casting for IsNewCustomer/HasDiscount/IsFreeShipping
- Advisory lock prevents race condition during parallel worker startup
- Returning Revenue now shows correctly: £14.5M (75% of total)