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
— (webhook does not push to Kit yet)
POST /api/webhooks/cal on BOOKING_CREATED
D1: bookings, events, contacts
— (webhook does not push to Kit yet)
POST /api/webhooks/kit?secret=…
D1: updates contacts.kit_unsubscribed_at + kit_consents.revoked_at
From Kit → us (reverse 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
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… | |||||