app/functions/api/stripe-webhook.js โ new endpoint we_1Tpt4CRvzUwDwHkjuSZGZKJi(events: checkout.session.completed + checkout.session.async_payment_succeeded)
skill-studio-buyer + bought-<slug>(packs: bought-pack-<slug>) + purchase note, AND a branded delivery email (navy/gold, from skills@sondraverva.com, reply-to her Gmail) with the access-page link + install steps. Pack emails list every included skill; the pack access page has all the download buttons.
(webhook-seen:<event.id>), delivers only when payment_status === 'paid', filters metadata.store === 'skill-studio' (other stores' events hit this endpoint too), always returns 200 on handled branches so Stripe never retry-loops.
app/src/data/delivery.js GENERATED by app-data/build_delivery_data.py(run it after build_access_pages.py whenever skills/packs change). โ ๏ธ delivery.js contains all access tokens โ server-side import ONLY, never import it from client code (verified not in the client bundle).
app/src/components/SkillFinder.jsx, mounted in App.jsx inside a silent ErrorBoundary.Ask AI (Haiku chat), Custom skill (request form).
skills.js/bundles.js the store rendersfrom โ adding a skill + rebuilding feeds everything, no extra step.
app/functions/api/custom-request.js: honeypot + validation + KV daily cap (30/day,fails closed) โ GHL upsert tag skill-custom-request + description note โ notification email to srverva@gmail.com (reply-to = requester). No fixed pricing shown anywhere โ Sondra quotes each personally.
app/functions/api/skill-chat.js)(+ server-side de-markdown), widget linkifies /skills/... + /bundles/... paths.
20 msgs/day per IP โ all KV (FINDER_KV), ALL fail closed. Worst case โ $1โ2/day; realistic โ a few $/month.
finder-kv = 338d8b0c34bb4e66ad8f263a1279a700, bound as FINDER_KV(prod + preview) on Pages project amplifai-skill-studio.
STRIPE_WEBHOOK_SECRET, RESEND_API_KEY, ANTHROPIC_API_KEY.(403 plan limit). Emails send from skills@sondraverva.com. Upgrade Resend or move delivery email to GHL later if she wants the matching domain.
nze3eGbKOXFNPkyrxlba created with tag + note,notification email confirmed in her Gmail
(custom-request cap, chat fail-closed + per-IP cap, webhook idempotency + payment_status)
email + GHL buyer tags end-to-end. Do this before announcing.
srverva+skillstudio-test@gmail.com (prior session) andsrverva+finder-test@gmail.com (this session, id nze3eGbKOXFNPkyrxlba).
skill-custom-request โ send prospect a"got your request" confirmation. The notify-Sondra email already works without it.
skill-studio-buyer tags for nurture sequences.Generated for the CEO Dashboard · source: PROJECTS/Skill Studio/handoffs/skill-finder-buyer-tracking-2026-07-05.md ๐ค