Track what Israeli Knesset members say on social media against how they actually vote. Built with ❤️ by volunteers of The Public Knowledge Workshop.
MKs (Members of Knesset, Israel's parliament) rarely publish a clear platform. What they post on X and how they vote in the plenum are two separate records that are hard for an ordinary person to compare. This project extracts each MK's stated positions from their public posts, then checks those positions against their real voting record — so voters, journalists, and researchers can see where words and actions line up, and where they don't.
- 💬 Join the Hasadna Slack
- 🐞 Found a bug? Open an issue
- 🤝 Want to contribute? Read the Contributing Guide — look
for issues labelled
good first issue - 🗣️ Hebrew and English are both welcome in issues and pull requests
You don't need cloud credentials to help. Frontend, accessibility, RTL layout, and documentation work all run locally — see CONTRIBUTING.md.
This project builds on the Israeli civic-tech ecosystem rather than duplicating it:
- Open Knesset — official voting records, bills, and committee data. Pipeline work continues at knesset-data-pipelines.
- Kikar Hamedina — aggregates MK social media posts, primarily from Facebook.
- knesset-data-python — low-level Python client for the Knesset data service.
- Knesset OData API — the official open-data source, and where this project's voting records come from.
None of the above correlates what MKs say publicly against how they actually vote. That gap is what this project fills.
Backend: Python 3.11+, FastAPI, BigQuery, Google Gemini, uv
Frontend: React 19, TypeScript, Vite (Hebrew RTL)
Pipeline: Gemini embeddings → k-means clustering → LLM summarisation
flowchart LR
A[Knesset OData API] --> C[BigQuery]
B[X API] --> C
C --> D[Gemini embeddings + k-means]
D --> E[LLM summarisation]
E --> C
C --> F[FastAPI backend]
F --> G[React / Vite UI]
See docs/DEVELOPMENT.md for the full pipeline design, BigQuery schema notes, and the ingestion contract.
Running the full pipeline needs live cloud infrastructure. There is no offline demo mode yet. You need:
- A Google Cloud project with BigQuery enabled
- A service-account key for that project
- An X API bearer token (v2, with historical read access)
- A Google Gemini API key
Copy .env.example to .env and fill in:
| Variable | Purpose |
|---|---|
GOOGLE_CLOUD_PROJECT |
GCP project hosting BigQuery |
GOOGLE_APPLICATION_CREDENTIALS |
Path to a service-account JSON key |
X_BEARER_TOKEN |
X API v2 bearer token |
GEMINI_API_KEY |
Gemini API key for embeddings and summaries |
A self-hosted rewrite that removes the BigQuery and Gemini dependency is planned. Contributions toward it are very welcome.
Requires Python 3.11+, uv, Node 20+, and the
gcloud CLI.
uv sync
gcloud auth application-default login
cp .env.example .env # then fill in the values aboveOn Windows (PowerShell), use gcloud.cmd auth application-default login and
Copy-Item .env.example .env.
Run the API and web UI:
uv run mkworkThen open http://127.0.0.1:8000. For frontend development with hot reload:
cd ui
npm install
npm run devRun the tests:
uv run pytest -q tests/ui/tests/ is excluded — those tests need generated pipeline output and
Playwright browsers, so they only run after a full pipeline run.
- Knesset voting records come from the official Knesset OData API — public record, freely redistributable.
- X/Twitter content is collected under X's Developer Agreement. This repository does not redistribute post text or any other X content. Only derived artifacts — embeddings, cluster summaries, issue scores — are stored.
Built by @yav02, @gilpeled, @Savioor, @inbararan, @LuckyRonny, and @danyaffe63, with roadmap and issue work from @TalGetz.
See CONTRIBUTORS.md for details. The repository history was
reset when the project was open-sourced, so git log does not reflect this.
Parts of this project were written with AI assistance. If you are an AI agent contributing here, identify yourself as such in any issue or pull request you open, and make clear which parts of your contribution are machine-generated and which a human reviewed.
MIT © The Public Knowledge Workshop (הסדנא לידע ציבורי).