8a7192eae8
One events row per beacon: the kind, the page, the clicked control, a salted hash of the address (never the address), its coarse place, and the browser, system and device read off the UA. A new public POST /api/events writes it and always answers 204; GET /api/admin/stats reads it back as totals, a day series and one grouped breakdown per dimension, behind the admin gate.