explaingit

celiknimani/civic-pulse

3TypeScriptAudience · developerComplexity · 4/5ActiveLicenseSetup · moderate

TLDR

Open-source framework for tracking government promises, parliament activity, and ministerial performance, with a Claude-powered ingestion agent that opens PRs.

Mindmap

mindmap
  root((civic-pulse))
    Inputs
      Government sites
      Parliament transcripts
      Trusted news
      sources.yaml
    Outputs
      Promise tracker
      Parliament radar charts
      Org chart with scores
      Automated pull requests
    Use Cases
      Track election promises
      Monitor a parliament
      Score ministerial performance
      Localize for a new country
    Tech Stack
      TypeScript
      Node 20
      Claude
      Cloudflare Pages

Things people build with this

USE CASE 1

Launch a country-specific government accountability tracker from a template

USE CASE 2

Track election promises with status, dated history, and sources

USE CASE 3

Visualize parliament activity with speech counts and topic radar charts

USE CASE 4

Run a Claude ingestion agent that opens PRs from official sources for human review

Tech stack

TypeScriptNode.jsClaudeYAML

Getting it running

Difficulty · moderate Time to first run · 1h+

Needs Node 20.10 or newer plus an Anthropic API key for the agent and a GitHub token for the automated PRs.

MIT license lets anyone use, modify, and distribute the code, including commercially, as long as the copyright notice is kept.

In plain English

civic-pulse is an open-source framework for tracking government accountability in any country. It lets a civic-tech team monitor election promises, parliamentary activity, and ministerial performance from one site. The repository ships only the framework, not real-world data. The README points to zotimi.com as the reference deployment that has tracked the Kosovo government since 2025, but that production dataset is kept in a separate private repo. A team that forks the project gets several built-in pieces. There is a promise tracker that categorizes commitments and labels each one Completed, In Progress, Delayed, or Pending, with dated history and sources. There is a parliament analytics view that counts speeches, words, and sessions per member and shows topic distribution as radar charts. There is also a government org chart that links ministries to the promises they own and scores their recent performance. Every route is prerendered to HTML for SEO, and the site can deploy to Cloudflare Pages, Vercel, Netlify, or any static host. The most distinctive piece is the ingestion agent. It is powered by Claude and reads a sources.yaml file that lists official government sites, parliament transcripts, and trusted news. It pulls in updates, extracts structured data with confidence scores, and opens a pull request for human review. Nothing is auto-merged. The agent can run on a cron schedule or be invoked as a subagent from Claude Code, and its extraction prompts live as reusable skills under .claude/skills/. The project defaults to English so contributors anywhere can read the demo, and supports locale files for additional languages. Currently shipped translations include English, Albanian, and German. To run a new country, a maintainer copies countries/example/ to a new code, fills in config and categories, lists the URLs to monitor, and runs the agent. Node 20.10 or newer is required, plus an Anthropic API key for the agent and a GitHub token for the automated PRs. The project is MIT-licensed.

Copy-paste prompts

Prompt 1
Walk me through copying countries/example/ into a new country and wiring up its sources.yaml
Prompt 2
Show me how the Claude ingestion agent extracts promise updates and opens a pull request
Prompt 3
Help me deploy civic-pulse to Cloudflare Pages with prerendered HTML for SEO
Prompt 4
Add a new locale alongside English, Albanian, and German for a country I want to track
Prompt 5
Explain how the parliament analytics view computes the radar chart of topic distribution
Open on GitHub → Explain another repo

Generated 2026-05-22 · Model: sonnet-4-6 · Verify against the repo before relying on details.