- Netlify Edge Function sets persistent aud_ab_id cookie for cohort assignment
- Deterministic hash (djb2) maps user ID + experiment name to variant slot
- Experiment registry with weighted variant support (src/assets/data/experiments.ts)
- React hook useExperiment() for component-level variant rendering
- Matomo Custom Dimension 1 repurposed for experiment tracking
- Sample 'nav-logo' 50/50 experiment: control (logo+text) vs text-only
- Unit tests for hash distribution and variant assignment