Where every email comes from on Elite Outsiders, and where it lands. Aggregated from contacts (D1 master table). Updates live as new emails come in.
contacts, marks drift unsubs. Manual run for now.
Every place on EliteOutsiders.com (and via webhooks) where a new email enters the system. All routes write to D1 contacts via a shared upsert helper.
/index.html → POST /api/subscribe-newsletter
D1: kit_consents, contacts
Kit tag: newsletter_frameworks
/frameworks.html → POST /api/subscribe-newsletter
D1: kit_consents, contacts
Kit tag: newsletter_frameworks
/library.html → POST /api/subscribe-newsletter
D1: kit_consents, contacts
Kit tag: newsletter_frameworks
/trauma-map.html email screen → POST /api/submit-trigger-map
D1: submissions, contacts + Resend (results email)
Kit tag: trauma_map_completed
POST /api/webhooks/lemonsqueezy on order_created
D1: purchases, events, contacts
Kit tag: customer
POST /api/webhooks/cal on BOOKING_CREATED
D1: bookings, events, contacts
Kit tag: booking_call
POST /api/webhooks/kit?event=activate|unsubscribe&secret=…
D1: upsert contacts on activate / mark kit_unsubscribed_at on unsub
Kit → us (bidirectional sync)
Four storage targets. Master is contacts (one row per unique email). The rest are per-source detail tables.
raw_json
Per-event rows
LS / Cal webhooks
/api/webhooks/kit
Pulled live from Kit V4 API using KIT_API_KEY. Total active = real subscribers in your Kit account right now. Drift = D1 vs Kit gap.
If "Drift" > 0, run Reconcile with Kit at the top — the site endpoint backfills missing kit_subscriber_id.
Pair-wise overlap counts. "Newsletter ∩ Buyers" = emails that subscribed AND bought.
For each contact, which source captured them first.
| Source | Count |
|---|
Among newsletter subscribers, which page they signed up on.
| Page / source slug | Count |
|---|
| Name | Sources | First touch | Last seen | # captures | |
|---|---|---|---|---|---|
| Loading… | |||||