Transparency
What we measure about you, and only this.
This is the live dashboard we look at ourselves. Same numbers, same queries. There is no second analytics dashboard with names, emails, IPs, or message content — the events table has no column to hold them. Every row below is a derived aggregate (a count, a rate, a bucket). Visitors who send DNT or Sec-GPC arrive unmeasured by construction — no row is written for them, no cookie is set.
The one place we DO keep your name, email, and the words you typed is when you DELIBERATELY submit a form — "begin your free hour," contact, or falsify a claim. Those land in a separate leads table on the same appliance and are visible only to the operator behind a hardware-key login. That table is not shown here; it is not summarized here; it does not color any number on this page. The split is structural — different table, different database role, different code path, different access control.
Signals
First-party, privacy-first analytics on our own iron. Last 24 hours.
SEO / GEO self-audit
First-party crawl of 8 key pages + site files. Scored on what crawlers and answer engines actually see. 94/94 checks pass.
All checks pass — clean SEO + GEO surface.
Engagement funnel
How visitors move from landing → solving the gate → reaching out.
Behavioral rates
Traffic sources
How visitors arrived (first-party classification — no third-party trackers).
AI & search crawler visibility (GEO)
Which answer engines and search bots fetched the site in the last 24h — the first-party signal that the brand graph + llms.txt are being read.
Top content (24h)
Most-visited paths.
Privacy posture
The whole schema, in plain English
Every aggregate above derives from exactly these columns in the analytics table. There is no other table.
id— an auto-increment row numbername— the allowlisted event name (page_view, gate_view, …)path— the page path, canonical (experiment query params stripped)source_bucket— a coarse arrival category (direct, referral, social, …)salted_day_id— an HMAC of (coarse IP + UA family) keyed by the day — opaque, same-day only, cryptographically uncorrelatable across dayssession_id— a tab-scoped random UUID — dies with the tabvariants— JSONB; baked-in experiment variant ids (no content)exp_id— the experiment id, if anydeploy_id— the Vercel deploy id (build provenance)props— JSONB; allowlisted derived numerics only (lengths, milestones, scroll percentages)ts— server-assigned timestamp
What is NOT stored, by construction
- your name
- your email address
- your phone number
- your IP address
- your User-Agent string
- the text of anything you typed into a form
- a durable cross-day visitor id
- any tracking-cookie value
The two JSONB bags above (variants, props) accept only allowlisted, derived values from the ingest validator on the appliance — they cannot become text-bags for content. Free-text and identifiers are dropped at the boundary, not after.
First-party measurement on the UNI-Lab appliance. No third-party trackers, no cookies for opted-out visitors, DNT/GPC honored end-to-end. Behavioral signal paid SEO/GEO suites can't see — because it never leaves our iron.
