Storytelling Program — POC Dashboard
POC

Pre-Go-Live Setup Checklist

Complete every item below before running acceptance tests. Your progress is saved automatically in this browser.

0 of 0 items complete
✓ All items complete — you're ready to run acceptance tests.
Reset checklist
Last updated: —
Storytellers — Total
— approved
Sourcing Pipeline — Total
— added today
Unsigned Release Forms
release_status = sent
PII Review — Pending
awaiting staff review
Critical Mentions Leads
added in last 24 hours
Approved & Partner-Visible
vetted + release signed
Table What it's for Filled by
Storytellers Master record for every storyteller — bio, demographics, district, vetting and release status, contact info Automation + staff
Sourcing Pipeline Incoming leads before they become storytellers — Cal.com bookings, Critical Mentions hits, manual referrals Automation + staff
Vetting Log Record of every vetting check — LexisNexis, social media review, findings, outcome Staff
Partner Requests Inbound requests from partner orgs for storyteller matches — issue area, district, media tier, deadline Staff
Press Pipeline Active press pitches — outlet, reporter, pitch status, interview date, media prep links Staff
Products & Lands Completed placements — publication, date, URL, content type, audience reach Staff
Retention Check-ins Scheduled check-ins to keep storytellers engaged — due date, status, updated issue areas Automation + staff
PII Review Queue Demographic suggestions (and any flagged content) queued for staff to approve, redact, or discard before saving Automation; resolved by staff
Config System-level settings — used by automations, not for day-to-day editing Tech
Goals Tracker Per-district sourcing targets vs. live actuals — storytellers, issues, and press lands, refreshed nightly Automation + staff
Donor KPIs Program KPI snapshot for funders — reach, activation, unique storytellers used Staff
Associates Team directory — email, Slack, Cal.com link — powers routing and Herald @-mentions Staff
Distribution Projects Op-eds, LTEs, and other owned content tied to a storyteller Staff
Photo Submissions Storyteller photo uploads from the form, matched back to records Automation + staff
Partner Tracker Partner organizations and their engagement history Staff
Feedback POC acceptance-testing submissions from this dashboard Staff
#storytelling-ops
Stories team · activity notifications
  • New Cal.com intake booking
  • Release form sent / signed
  • Release form follow-up reminders sent
  • ⚠️ PII review required
  • New Critical Mentions leads added
  • Inbound SMS from a storyteller
#storytelling-tech
Tech (Shar) · system health only
  • Lambda errors
  • Cron job failures
  • API error rate alerts
CAL Booking confirmed → Sourcing Pipeline record + Slack
SIGN Release form sent → Release Status = sent + Slack
SIGN Release form signed → Release Status = signed, Has Signed Release checked + Slack
SMS Unsigned after 3 days → text reminder sent automatically (daily cron)
GRA Interview notes pasted into a record → a daily job suggests demographics into the PII Review Queue for staff to approve
CM Critical Mentions RSS polled hourly → Claude scores each item → high/medium leads written to Sourcing Pipeline + Slack
Release Status
unsigned — not yet sent sent — awaiting signature signed — complete expired — lapsed, resend needed
Vetting Status
pending — not yet vetted approved — cleared flagged — issue found hold — paused, check back
Lead Status
new — just arrived in_outreach — contacted no_response — no reply yet converted — became storyteller declined — passed
PII Review Status
pending — awaiting staff review approved — ok to use redacted — used with edits discarded — do not use
Cal.com — intake interview booking page; sends webhook on confirmation
OpenSign — release form sending and signature collection; sends webhooks on status changes
Granola — records and summarizes intake calls; the associate pastes the notes into the record
Critical Mentions — media monitoring; saved keyword searches produce RSS feeds the system polls hourly
AWS Comprehend — scans intake notes for sensitive content (names, SSNs, addresses) before anything is stored
Claude (AWS Bedrock) — scores Critical Mentions leads for storyteller potential; never receives PII
AWS End User Messaging — sends SMS reminders for unsigned release forms via toll-free number +1-855-560-6294
Airtable — everything lives here; the system reads from and writes to it across its automations

Goals & KPIs

Sourcing goals by district (Sage's target: 2 storytellers per priority issue per district) measured against the current storyteller bank, plus the donor KPI set. Snapshot as of July 15, 2026 — regenerated on demand.

162
Storytellers in priority districts
58
District×issue goals met (of 125)
3
Districts with no storytellers yet
25
Priority districts tracked

Sourcing goals by district

cell = # storytellers · target 2 · met 1 0
District# storytellersMedicaidSNAPePTCTariffsUtilities
AZ-01840201
AZ-02310013
AZ-06864202
CO-03110000
CO-05200001
CO-081191202
IA-011063323
IA-02100111
IA-031485563
MI-04600014
MI-071032203
MI-10950203
NC-11820000
OH-07300133
OH-10220022
OH-15200002
PA-01632022
PA-071262436
PA-081344729
PA-101140111
TX-15000000
TX-23000000
TX-35000000
WI-01534112
WI-031766463

Donor KPIs

MetricValue
Reach — traditional media lands≈ 34.7M 2026 YTD · press lands with a reach value (partial)
Reach — new/digital media≈ 5.2M 2026 YTD (partial)
$ behind earned media lands— — only 8 lands have ad spend; source too sparse to total
Unique storytellers landed with press20 2026 YTD
Unique storytellers used by digital20 2026 YTD
Unique storytellers used by partners— — needs Sage's org-classification rule
Unique storytellers used by political entities (candidates, PACs, American Bridge, Porchlight)— — needs Sage's org rule
Storytellers activated38 2026 YTD
Storytellers with multiple product types12 2026 YTD

Reading it: each cell is the count of storytellers in that district tagged with that issue; green = target of 2 met, amber = 1, red = 0. TX-15/23/35 have no storytellers yet — a real sourcing gap. Donor KPIs (reach, $ behind lands, unique storytellers landed) stay "pending" until storyteller ↔ product/land links exist and Sage confirms the counting rule; then they compute here too.

System Overview

The technology platform behind the CAP/CAPAF Storytelling Program — automating the storyteller lifecycle from sourcing through vetting, onboarding, distribution, and impact tracking, plus a partner-access layer. A one-page map of what's inside and what it does. 141 commits since June 5, 2026.

7,930
Lines of Python
18
Scheduled crons
5
Webhook Lambdas
16
Airtable tables
126
Passing tests
800+
Storytellers
Inputs — external events
Cal.com bookings OpenSign signatures Slack @Herald Inbound SMS Critical Mentions RSS Google Forms
Processing — event-driven + scheduled
API Gateway → 5 Lambdas (calcom · opensign · sms · Herald entry + worker) EC2 → 18 crons (sync · vetting · email · reporting)
Intelligence + data
Bedrock — Claude Sonnet 4.5 Comprehend — PII scan Airtable — 16 tables · source of truth
Outputs
SES email (managed opt-out) SMS Slack / Herald replies Partner portal (Cloudflare Pages)

All secrets in one AWS Secrets Manager entry · env-gated poc/prod (SMS + email dry-run until go-live).

Sourcing & Intake

Cal.com bookings create sourcing leads and self-assign an associate; converted leads become storyteller records; media leads flow in from hourly Critical Mentions scanning + Claude classification.

calcom_intake · lead_conversion_sync · critical_mentions_poll

Vetting

AI surfaces reputational concerns from associate-gathered findings as advisory notes — human-in-loop, never auto-deciding. Re-vetting alerts and Comprehend PII scanning included.

vetting_analysis · revetting_alerts · comprehend_scanner

Onboarding

Welcome email with the onboarding-form link; Google-Form responses sync photos, demographics, and interests onto records; OpenSign release-form events update signing status.

onboarding_email · onboarding_form_sync · opensign_webhook

Distribution — Herald

A conversational Slack bot: @-mention it to log a press pitch, a result, a land, or request a partner match. It reads the thread, plans the turn, writes the record, and pings the owning associate.

slack_events · slack_worker · claude_client

Partner Access

AI-ranked storyteller matching for partner requests (eligibility + geography filtered, issues ranked semantically) and pasted-request → outreach-draft generation.

storyteller_match · partner_outreach_draft

Reporting & Impact

Impact scoring per storyteller; nightly per-district goal actuals (storytellers, issues, press lands) behind the Goals & KPIs dashboard; donor KPI snapshots; retention check-ins.

impact_scoring · goals_actuals · retention_checkins
AWS Lambda · API Gateway EC2 · cron Bedrock · Claude Sonnet 4.5 Comprehend · PII SES · SMS Airtable Slack · bot + webhooks Cloudflare Pages Python · pytest

How to read this. Counts are live from the repository (7,930 Python LOC across app + tests; 126 tests green). Environment is poc — SMS and email stay in dry-run until the production cutover. For per-feature status and ownership, see the Feature Status tab.

Open “The Journey” as a full page ↗

Operational Cost

What it costs to run the platform, by seat and by service. Modeled for 3 users (the two current associates + one planned hire). Slack and the EC2 host are provided through the shared IT CORE / DIGITAL CORE offerings, so they carry no marginal cost here; AWS is a usage estimate.

$473
Per month · 3 users
$5,670
Per year · 3 users
+$1,600
Per added user / yr
$6.88
Per storyteller / yr
PlatformAnnual / user3 users
Airtable$500$1,500
Critical Mentions$800$2,400
Cal.com$150$450
Granola$150$450
Per-user subtotal$1,600$4,800
ItemAnnualNotes
AWS platform~$720est. ~$60/mo — Bedrock (Claude Sonnet 4.5), SMS, Secrets, SES, API Gateway
OpenSign$150flat account
Slack$0baked in IT CORE offering
EC2 host$0baked in DIGITAL CORE offering
Fixed subtotal$870
Incremental cost per user: +$1,600/yr (≈ $133/mo). Each new team member adds four per-seat licenses (Airtable, Critical Mentions, Cal.com, Granola). AWS, OpenSign, Slack, and EC2 do not grow with headcount.
Team sizePer yearPer month
3 users (today)$5,670$473
4 users$7,270$606
5 users$8,870$739
6 users$10,470$873

Baseline today: Google Alerts arriving by email, and everything else done by hand — reading and triaging alerts, typing leads, tracking forms, logging pitches, counting KPIs. The platform runs that flow end to end. Estimated reclaimed staff time below.

~19
Hours / week reclaimed
~970
Hours / year (~½ FTE)
~$39k
Labor value / year
~6.8×
Return on the ~$5.7k cost
FlowManual now (hr/wk)Reclaimed (hr/wk)
Media monitoring & lead triage (Google Alerts → read, judge, enter)6.05.0
Interview notes → fields + demographics3.02.0
Partner matching + outreach drafts3.02.0
Press pipeline logging (pitch / result / land)2.51.7
Reporting · KPIs · goals counting2.52.0
Vetting logging + re-vet flags (AI assist; staff still decide)2.51.0
Onboarding email + form sync + photos2.01.6
Intake booking → record + assignment1.51.3
Release-form tracking + reminders1.51.2
Lead → storyteller conversion (re-typing)1.00.9
Retention check-in tracking1.00.7
Total~28.5~19.4
Net: the platform costs ~$5,670/yr and returns ~$39k/yr of reclaimed staff time — about half an FTE — before counting the coverage and speed gains below. Even at a conservative labor rate it pays for itself several times over.
  • Coverage. Scans ~90 news items every hour, around the clock, AI-scoring each — vs. a person skimming Google Alerts a few times a day. Leads that used to slip through are now caught.
  • Speed. Article → scored lead in the pipeline in ~5 minutes, any hour — vs. hours-to-next-day by hand.
  • Nothing dropped. Every booking, signature, pitch, and land is logged the moment it happens; unsigned forms and overdue re-vets flag themselves.
  • Better matches. Ranks 800+ storytellers by issue and geography instantly, surfacing people a manual search would miss.
  • Judgment preserved. AI suggests (concerns, demographics, matches); staff always decide — speed without losing the human call.

Assumptions. Seat prices are the annual list rates you provided (Airtable $500, Critical Mentions $800, Cal.com $150, Granola $150 per user/yr; OpenSign $150/yr flat). AWS is an estimate — most of it is Bedrock for Critical Mentions, which batches 50 items per call (~1,440 calls/mo, roughly constant regardless of team size). Per-storyteller figure uses the current 824 storytellers. Slack and EC2 excluded as shared-CORE services. Efficiency figures are estimates of team-wide manual hours at current volume, valued at an assumed ~$40/hr loaded labor rate over 50 working weeks — adjust the rate or hours and the value scales linearly.