PRODUCTION · ENROLLMENT CRM & CONSOLE

Every enrollment submission, captured — and carried the rest of the way.

Basecamp started as the landing zone for HealthSherpa's Medicare webhook — catch every submission, persist it durably, let everything else read from the row on disk. It's grown into the console agents actually work from: a CRM over the whole AEP/OEP list, concierge and template emails sent from an agent's own mailbox, bulk texts from their own Zoom number, dental/vision comparison sheets, and the Salesforce record chain that turns a submission into a policy.

Schema healthsherpa + CRM — Salesforce two-way sync — Staff console · SSO — GitHub ↗
CAPABILITIES
01 · Submission to Policy
⚡
Internal · Railway
Nothing inline, nothing lost, nothing double-created

The only work done inside the webhook request is one INSERT of the verbatim payload — HealthSherpa retries and gives up permanently, so nothing that can fail runs before the row is safely on disk. From there a background chain takes over: normalize into contact and rider records, then create Account → Contact → Deal → Benefit Product → Benefit Policy → Member Transaction in Salesforce, one step at a time, picking back up exactly where a failed run left off. Since HealthSherpa's policy API has no webhooks, a separate sweep polls it on a schedule to learn when a submission actually becomes a policy.

Ingest Verbatim INSERT, retry-safe upsert on medicare_application.id
Chain 6-step Salesforce create, resumable after any failed step
Status Scheduled poll (no webhook exists), matched by minted external_id
Audit Every raw POST retained, replay-flagged
Internal service · no UI
02 · The CRM Console
🗂️
Internal · Staff console
The AEP/OEP list, Salesforce linking, and one change log for both

The CRM console replaced the spreadsheet: a master list of every AEP/OEP member, with saved custom views by product and county, and workflow columns — Status, SOA, Intake, Auth, Notes — that only ever live in Basecamp. Each row links to its Salesforce Contact by email, then MBI, then phone-plus-name, with every automatic and manual change written to one change log per member — Basecamp edits, Salesforce sync, and HealthSherpa's own record changing between checks, all in one place.

Linking Email → MBI → phone+name, kept to one Salesforce Contact
Sync Three-way merge against the last-agreed value, per field
Change log Every edit, sync, and HealthSherpa change, one row per event
Policies Under-65 book (hourly) + OEP readiness + payment risk, one page
Internal · SSO required
03 · Reaching the Member
✉️
Internal · Outbound
Email and text, sent as the agent — not as the integration

A concierge welcome email drafts itself from every Medicare submission; template letters merge a member's own CRM data and the sender's profile; bulk email and bulk SMS go out from each agent's own connected Outlook mailbox and Zoom Phone number, never a shared account. Every send is logged back to Salesforce as activity on the member's timeline, with open and click tracking built in. Dental and vision comparison sheets round out the toolkit — a model reads an uploaded quote, matches it to the plan catalog, and the finished sheet files itself to the household in Salesforce as a PDF.

Senders Each agent's own Outlook mailbox + Zoom number, OAuth per user
Tracking Open/click tracking, logged to Salesforce as Activity
Comparison AI-assisted quote reading, catalog-backed dental/vision sheets
Export Excel or branded PDF, filed to the household once (dedup by hash)
Internal · SSO required
Runtime
Python FastAPI Uvicorn
Data Store
Postgres Private networking
Integrations
Salesforce Microsoft Graph Zoom Phone Claude API
Webhook Security
API Key auth High-entropy path token Constant-time compare
Access
SSO sign-in Per-area grants
Infrastructure
Railway Nixpacks

Basecamp is the staff console for Medicare and ACA enrollment work at YourPolicy — not customer-facing, but no longer just an ingestion service either. Every page sits behind SSO with per-area access grants, and the database holds PHI: kept on private networking, with independent-agent submissions carrying no DOB, email, phone, or MBI by design.