Components · Political

Campaign health

A civic campaign at a glance — the CampaignStatusCard roll-up over one CampaignRollupRow. The scope/status badges lead, the headline progress toward a call/commitment target reads as a display StatTile + OKR Meter with a momentum indicator, then the volume + call-through key stats, the repeat-contact cooldown posture, and a recent-activity Timeline. A lapsed cooldown flips the posture to a warn badge and surfaces the accent Re-open action.

CampaignStatusCard · national · cooldown active

Ban Beagle Testing — Call Your Representative

National HR 1234
Active 64% of goal · rising
Calls to Congress
642 +138 this month
toward the 1,000-call goal
642 / 1,000 calls 64%
Contactors
214
distinct volunteers
Contacts logged
1,122
calls + emails + visits
Reached
372
live staffer or member
Call-through 58% · 372/642
Cooldown active · 72h window

You can contact again in 41h.

+138 calls this month — on pace to clear the 1,000 goal before the Oct floor vote.

Recent activity

  1. 2d ago
    Last announcement
    HR 1234 cleared the Judiciary Committee — re-ask fresh
  2. 5h ago
    Last contact
    Called Rep. Whitfield's DC office — got through

The % of goal badge + the momentum pill both derive from the roll-up; the display StatTile carries the +138 this month delta and the Meter spells out N / target. Cooldown posture reads "active" from lastContactAt + cooldownHours.

Lapsed cooldown · warn posture + Re-open action (:hover pinned)

Anti-Tethering Ordinance — Clark County

State NV
Active
Contacts
86
last contact 9d ago
Contactors
31
distinct volunteers
Call-through 34% · 12/35
Lapsed — ready to re-open

Past its cooldownHours window with no fresh announcement, lapsedCooldown flips the neutral posture badge to warn and reveals the accent Re-open button (pinned :hover) that fires the onReopen passthrough.

campaign
A CampaignRollupRow (lib/committee-politics) — title / scope / status / contacts / contactors / calls+callsThrough / throughRate / cooldownHours / lastAnnouncementAt / lastContactAt / lapsedCooldown. Every number + the lapsed flag come straight off it.
progress + momentum
The target read-out — a display StatTile (count · +N this month delta) over an OKR Meter (N / goal). Higher call-through is better: good ≥50% · accent ≥20% · warn below.
contactStatus
Optional per-viewer ContactStatus → the "you can contact again in Nh" (or "update posted") line under the cooldown badge. Rendered close to where it was computed — the card never reads the clock.
onReopen / onSelect
Passthrough callbacks. onReopen surfaces the accent Re-open button when lapsedCooldown is true; onSelect turns the title into a button (open the campaign detail).

Source · ds/political/CampaignStatusCard.tsx (composed FROM ds/surface Surface + Timeline) · @phauna/ds StatTile / Meter / Badge / Button · momentum from ds/political/CommitmentFunnel.tsx · data lib/committee-politics.ts.