All events are POSTed by bc-tracking.js to /api/events on bycaliber.com, enriched server-side (country, browser, device, source class, bot detection), and stored in D1 bycaliber.events. Tools binds the same D1 read-only for dashboards.
| Event type | When it fires | Meta payload | Notes |
|---|---|---|---|
page_visit |
On DOMContentLoaded | (none — base fields only) | Auto-fired by bc-tracking.js |
page_exit |
On pagehide / beforeunload |
{ path, ms, max_depth, had_conversion } |
Single structured exit event |
scroll_depth |
When scroll crosses 25/50/75/100% | { depth } |
One per threshold per page load |
time_on_page |
On pagehide / beforeunload |
{ ms, max_depth } |
Visible-time only (excludes hidden tab time) |
click |
On every click (debounced 400ms) | { x, y, tag, id, track_id, text } |
Coordinates as % of viewport |
outbound_click |
On click of external <a> |
{ host, href } |
Captured before navigation |
contact_link_clicked |
On click of mailto: / tel: / sms: |
{ scheme, href } |
Counts as conversion-adjacent |
cta_call_clicked |
Manual bcTrack() on "Book a call" CTA |
(custom) | Wire on bycaliber.com CTAs |
cta_signin_clicked |
Manual bcTrack() on Sign-In button |
(custom) | Pending Sign-In UI rollout |
nav_lang_switched |
Manual bcTrack() on FR/EN toggle |
{ from, to } |
Pending wiring |
newsletter_signup |
Manual bcTrack() on newsletter form submit |
(custom) | Pending newsletter |
web_vital |
Auto (LCP / FID / CLS) | { name, value } |
Pending Web Vitals integration |
js_error |
Auto on uncaught JS error | { message, stack, source } |
Pending error handler |
Each incoming event is enriched before insertion into D1:
cf.country)Visit any bycaliber.com page with ?bftrack=off to disable tracking on your device (localStorage flag). Re-enable with ?bftrack=on.