Every click below fires a real tracking event to Supabase. Interact with the elements, watch each event appear in the live console, then open the demo dashboard to see the aggregate numbers move.
Your visitor tag
Every event in the live console below is labeled with it, so you can tell your own clicks apart.
Visitor-0000
→ Watch it appear in the consoleGenerated for this visit. The demo dashboard is public, so we never ask for your name.
Your dashboard trackInteraction()
Your data, your dashboard, your server
The Measr dashboard is a React app that connects directly to your Supabase project. Every chart, every metric, every session — sourced from rows you own.
Dashboard overview with KPIs, charts, and real-time session data. Everything you need at a glance.
Data Model
Know exactly what gets tracked.
Every field, every module, fully transparent. No hidden data collection. No mystery payloads. This is the complete schema that lands in your Supabase.
Shared dimensions
Stored with every event (identifiers and session linkage are resolved server-side)
Field
Type
Description
session_id
uuid
Resolved server-side per visit (30-minute inactivity window)
anonymous_id
uuid
Daily visitor key, derived server-side; nothing stored in the browser
site
string
Your site identifier
page_name
string
Current page at time of event
device_category
string
Desktop, Mobile, or Tablet
geo_language
string
Browser language, primary tag (e.g. en)
geo_region
string
Timezone-based region
created_at
timestamp
Event timestamp (ISO 8601)
A
Page tracking
page_view
Field
Type
Description
page_name
string
Name of the current page (top-level column)
previous_page_name
string
Previous page (or "Entry") — resolved server-side from the session
original_referrer
string|null
First page view of the session only
query_parameters
string|null
UTM keys only (utm_source, utm_medium, utm_campaign, utm_content), first page view of the session only. All other URL parameters are dropped in the browser; this demo captures none at all.
B
Interactions
interaction
Field
Type
Description
interaction.element
string
What was clicked (e.g. "CTA button")
interaction.name
string
Action name (e.g. "signup_click")
interaction.click_count
1
Always 1 per event
C
Navigation
navigation
Field
Type
Description
navigation.type
string
Nav category (main, footer, sidebar)
navigation.value
string
Target page or link label
navigation.click_count
1
Always 1 per event
D
Exit links
exit_link
Field
Type
Description
exit_link.url
string
Outbound destination, origin + path only (query string and fragment are stripped in the browser)
exit_link.click_count
1
Always 1 per event
E
Scroll depth
scroll_depth
Field
Type
Description
scroll.depth
number
Milestone reached: 25, 50, 75, 90, or 100
scroll.hit_count
1
Always 1 per milestone
F
Video
video
Field
Type
Description
video.name
string
Video identifier
video.milestone
string
0%, 25%, 50%, 75%, 90%, 100%
video.seconds
number
Seconds since previous milestone (delta)
video.start_count
0|1
1 only at 0% milestone
video.90percent_count
0|1
1 only at 90% milestone
video.hit_count
1
Always 1 per milestone
G
Errors
error
Field
Type
Description
error.message
string
Error message text
error.count
1
Always 1 per error
H
Downloads
download
Field
Type
Description
download.name
string
File name
download.type
string
File extension (pdf, csv, etc.)
download.count
1
Always 1 per download
K
Form tracking
form_view / form_start / form_end
Field
Type
Description
form.name
string
Form identifier
form.view_count
1
Sent with form_view
form.start_count
1
Sent with form_start
form.end_count
1
Sent with form_end
19 modules are defined in the CDE Analytics Standard. 9 ship today. The remaining 10 are specified and ready. They ship as demand validates them.
Common questions trackInteraction()
Frequently asked questions
What does Measr track? ▶
Page views, sessions, scroll depth, interactions, downloads, exit links, video engagement, forms, and errors. Nine modules, each with a defined event schema. You wire up what you need, ignore the rest.
What if I already use GA4 or another tracker? ▶
Measr is a lightweight JavaScript SDK that sends events to an ingestion function in your own Supabase project. It doesn't conflict with GA4, Plausible, Matomo, or any other tracking tool. Run them side by side.
How much does it cost? ▶
€19 per month. As long as you pay, you get full access to the repository, product updates, security patches, and support. If you cancel, you keep the version you have, it stays running on your server.
Can I track multiple sites? ▶
Yes. Pass a different siteId to Measr.init() on each site. All events land in the same Supabase project, filtered by site in the dashboard.
Is Measr GDPR-compliant? ▶
Measr stores data in your own Supabase project — you control where the database lives. No data leaves your infrastructure, and no third-party cookies are set. You're the data controller, not us.
How do I set it up? ▶
Clone the repo, configure your Supabase credentials, add one script tag, deploy. The whole process takes about 30 minutes. Or use the Claude Code setup skill below — it walks you through every step automatically.
Setup trackDownload()
Install with Claude Code
AI-guided setup in your terminal
The Measr setup skill walks Claude Code through your entire installation — Supabase config, migrations, SDK integration, and verification. One command, fully automated.
Requires a Measr license and Claude Code installed on your machine.
Walkthrough trackVideo()
See it in action
A quick walkthrough of the dashboard, from page views to form funnels.
Welcome video coming soon
Who built this trackExitLink()
Built by someone who spent 16 years cleaning up bad tracking
Measr isn't a weekend project. It's the distillation of every analytics implementation mistake I've seen, and the standard I built to stop making them.
Built by
Balázs Turán
Digital analytics consultant with 16 years in the field. Built analytics departments from scratch at Metro AG, designed tracking strategies for Zürcher Kantonalbank, and led Mazda Europe's GA4 migration. Measr is the CDE Analytics Standard, packaged as a product.