The day-to-day operations of our site, mostly on autopilot — so the team handles the exceptions, not the busywork.
The honest version: most repetitive work a coordinator, recruiter, or finance person used to do by hand now happens automatically, with safety checks that catch mistakes. The rest of this deck is the detail behind each of these.
Each serves a distinct audience. All share one BigQuery dataset and one component library.
Recruitment, schedule, leads, comms, study performance, and study management. Backed by BigQuery views and the CRIO API.
The 4-layer revenue & receivables platform — data-health → revenue validation → per-study margin → collections — over the dollar-journey reconciliation spine. Per-study margin (contribution + fully-loaded), invoicing, and CRIO write-back for payments, invoices & reconciliation (live); mark-paid write-back is built and validated in test, not yet enabled in production. Gated to finance and leadership.
Study browse, eligibility intake, and scheduling for pre-screening (Lp(a), FibroScan).
Direct-from-clinic ordering for Lp(a) and FibroScan, fax-back referrals, and a study list with eligibility criteria.
The current footprint, derivable from live deployments.
Twelve automated actions, 6am–noon, typical weekday. At most sites each one would need a human.
CRIO upstream. BigQuery canonical. Other vendors handle channels.
| System | Role | Read access | Write access | Notes |
|---|---|---|---|---|
| CRIO source | EDC / clinical | REST API · webhooks · Fivetran CDC | PUT (allowlisted) + UI writer | Patient, study, visit, appointment, action-type. Finance (payments/invoices/mark-paid) via a Computer-Use browser writer — no finance API. Site-scoped. |
| BigQuery store | analytics store | SQL views | scheduled loads & mat. views | Canonical dataset behind every dashboard. |
| Telnyx channel | SMS · fax | delivery webhooks | send SMS · send/receive fax | Outbound SMS through one chokepoint · DNC + throttle + quiet window. |
| Google Voice source | voicemail intake | poll / transcript fetch | — | Voicemail triage. Claude classifies + auto-routes. Every 10 min · M–F. |
| GCS store | binary blob storage | signed URLs | agent uploads | Fax media + scraper artefacts. Replaced Firestore for binaries. |
| Tremendous channel | payments | order-status webhook | issue rewards (Visa) | Patient stipends and Lp(a) early-payment flow. |
| SignWell channel | e-signature | completion webhook | create signature requests | Consent capture · webhook updates the patient's consent status. |
| Gmail · Google APIs channel | email · drive | DWD service account | send email · drive writes | Outbound patient comms (queue-gated) and finance-direct mail. |
| JotForm source | intake | webhook endpoint | — | Single endpoint for form intake. |
| GitHub Actions infra | CI/CD | repo | deploy to Cloud Run · Firebase | Auto-deploy on push to main. |
For integrations, audits, and incident response.
Agents, rules, and routines — inventoried in one tab. This slide mirrors it.
+ 1 more
+ 5 more
Sources above, surfaces below. The core in the middle is where logic, automation, and audit live.
One visual language across all four surfaces. A private repo, git-submoduled into every property.
#072061#1843AD#A2DCEB#FF9933#b35900#f0f4faInter — body and UI on every surface, weights 200–800.
Market Pro — handwritten accent, always orange, sparingly. Landing-page hero · Lp(a) cards.
Chips, buttons, KPI tiles, badges, flags, action rows, panels, and more — one helper per component.
Object args, schema-validated. Every helper emits a tagged marker for lint + audit.
Two gradients for hero treatments (navy→blue, orange→navy). Logo lockups + favicons + email-shell templates centralised in the same repo.
Email + SMS render against the same tokens; this presentation does too.
The contract for using it. Every visible element obeys these rules.
Every visible element carries a design-system marker. Drives lint, audit, debug overlay.
No raw component markup anywhere. Object args, schema-validated. The 23 helpers are inventoried on the previous slide.
Three lint rules + headless CI audit. Coverage floor 80%, rising to 100%.
Two oranges: text-orange for type + buttons (AA contrast), decoration-orange for accents. Never mixed.
Floor starts at 80%, ratchets to 100% as modules retrofit. CI fails below the floor. Legacy is grandfathered with an expiring annotation.
Hand-drawn warmth, orange-only, never for body copy.
Constitutional principles. Every agent, chokepoint, and audit trail honours them.
One source-of-truth per fact. Four lint tripwires enforce it.
Every mutating action funnels through one function with default-on safety guards: DNC, throttle, kill switch, idempotency.
Read-only by default. Trait writes are blank-fill only; coordinator data is authoritative. The finance write-back bot reads back every write and confirms storage == intent before reporting success.
CRIO has no financial-write API. We reconcile against the deposit, never CRIO claims.
Schema-validated outputs cite subject, visit, and evidence row. Severity capped by ground-truth tier.
Every action logged (21 CFR Part 11). Auto-pause on 3σ findings spike.
Every staff member has a role; every role has a fixed tab list. 4-layer default-deny. Unassigned staff are blocked.
| Role | Users | Tabs visible |
|---|---|---|
| admin | 1 | 11 (incl. leadership + admin) |
| leadership | 4 | 9 (operational + leadership) |
| finance | 2 | 4 finance-only |
| ops | 7 | 7 operational |
| coordinator | 7 | 7 operational |
| recruiter | 5 | 7 operational |
| investigator | 11 | 4 investigator-scoped |
| readonly | 2 | 3 minimal |
The dashboard is the foundation. Four bets build on top — each compounds the others.
Agent-orchestrated patient qualification, end to end.
Backend-once, frontend-anywhere — multi-site by construction.
Natural language over the unified data model.
The same data, a sponsor's questions — cross-site, cross-study.
Each ask is grounded in a postmortem or workaround. Platform changes that would let us delete compensating code.
Reject regressions like ENROLLED → INTERESTED at the API layer.
Refuse trait, medication, or history overwrites for any patient with a completed visit; allow blank-fill only.
Return "actionType=INVALID not in enum" instead of "actionType is required."
Structured fields on the study record, not free-text in notes.
Boolean on the patient record, respected by every read and aggregate.
Read-write API replacing "only-in-PDF" as the source of truth.
A direct PUT /subject/{id} instead of burying status updates inside studies[] on Patient PUT.
Batch N records per call; client-supplied idempotency token for safe retry.
API surface for subject-document file bytes, not just metadata.
A real flow. Each step touches a different integration; agents fill the gaps.
Abbreviations used above.