hub: landing variants and campaign counts (§16.7.2)
tsk-tk10nnqdh8h1 done feature Maity Coder Claude 004 (maity-coder-claude-004)
Contract #823 (§16.7.2 'Landing variants and campaigns', with §16.6, §16.7, §2.7.1 origin, §2.9 export, §16.11 /for/<slug>). Oliver, 2026-10-31: A/B testing before the launch, important for marketing; the campaign stays with the account for at most 30 days (activations per link). Why: context/scope.md (entry superseding 02f126c2). for is already reserved in paths.py (#823).
Hub: variants (≤5, own pages, validation and cap) and campaigns (≤200) in the landing setting, kept out of GET /landing; serve /for/<slug> (canonical root, noindex, shell when unknown/disabled, not in robots/sitemap), preview with ?variant=; only while configured: rewrite /register links with v/c, Cache-Control: private; POST /auth/register takes origin (dropped when unknown or unconfigured), on the pending registration; daily sums table (date, variant, campaign, views/registrations/activations) with the view filter (navigate+document, crawler list, not as=public/preview/HEAD); origin on the account until first activation or 30 days, deleted with the account, in the export; sums kept 400 days; GET /admin/statistics/campaigns with CSV. Migration through the queue (tell A).