Omnigraph
그래프 엔진으로 컨텍스트를 조립하고, 객체 저장소 기반에서 에이전트가 코드처럼 그래프 데이터를 분기·타입·검토·병합·감사·거버넌스합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Follow The Money IL aggregates, normalizes, and analyzes Illinois campaign-finance data from both state and federal sources, making the flow of political money searchable and explorable in one place. It ingests Illinois State Board of Elections bulk filings alongside federal Schedule A/B/E data from the OpenFEC API, then layers on entity resolution, network analysis, and donor intelligence across election cycles. The platform tracks 6.4M+ itemized receipt rows, 530K+ D-2 filing totals, and 1.3M+ donor-analytics rows, and is deployed in production at followthemoneyil.com with scheduled syncs that keep federal and analytics data current.
/candidates/<id>: all of a candidate's committees, most recently active first); full donor and payee lists per committee (/committees/<id>/donors, /committees/<id>/payees) and contributor / recipient lists per 527 organization (/527/<ein>/contributors, /527/<ein>/recipients), linked from each profile's top-N tables; every state race of a cycle (/analytics/state-races/); and an opt-in roll-up of serial committee re-registrations (/committees/?by=family) driven by admin-reviewed committee families (/admin/committee-families). Ingest Parse / normalize Store Serve
────── ───────────────── ───── ─────
ISBE bulk filings ┐ ┌── PostgreSQL ──┐
OpenFEC API ├─► chunked ETL + async ───┤ normalized ├─► Flask web UI
IL SOS lobbying │ Playwright scraping, │ tables + │ + JSON/CSV API
IRS 527 filings │ entity resolution, │ analytics │ (Redis-cached
Chicago open data │ cross-matching │ rollups │ heavy views)
OpenBook contracts ┘ └────────────────┘
Scheduled jobs keep the data fresh: a recurring sync refreshes federal (FEC) contributions, rebuilds donor identities, and rebuilds analytics rollups.
git clone https://github.com/Doommen3/Illinois_campaign_finance.git
cd Illinois_campaign_finance
python3 -m venv venv
source venv/bin/activate
pip install -r requirements.txt
playwright install chromium
cp .env.example .env
# Set DATABASE_URL, FEC_API_KEY, and FLASK_SECRET_KEY in .env
createdb ilcf
export DATABASE_URL=postgresql://$(whoami)@localhost/ilcf
DATABASE_URL is required in all environments. (A legacy DATABASE_PATH SQLite setting exists for backward compatibility but is deprecated and unused for new setups.)
# Create the database schema
python run.py init-db
# Sync federal (FEC) data for Illinois candidates
python run.py sync-fec-il-federal
python run.py rebuild-fec-donor-identities
# Build analytics rollups
python run.py refresh-analytics
# Start the development web server
python run.py runserver --port 5000
In production the app is served via Gunicorn against the WSGI entry point (wsgi.py). Run python run.py --help to see the full set of ingestion, scraping, and maintenance commands. Table shapes, join keys, and data quirks are documented in .claude/data-dictionary.md.
Contributor addresses come from public ISBE filings. Removal requests under the
Illinois Judicial Privacy Act (705 ILCS 90) and similar laws are honored by
scrubbing the address to ISBE's own Redaction Requested format while keeping
the contribution record. The public policy is at /privacy.
python run.py add-privacy-redaction --first Jane --last Doe --zip 60601 \
--requested-by "Requester" --request-date 2026-07-16 --statute "705 ILCS 90"
python run.py apply-privacy-redactions # re-apply after sync-prod-db; sunshine-import does this automatically
Runbook: docs/runbooks/privacy_takedown_response.md.
Serial re-registrations of one political actor are grouped (never merged) into reviewable families; only accepted families appear on public pages.
python3 scripts/committee_families.py report --limit 30 # read-only dry run: proposed families and weak pairs
python3 scripts/committee_families.py seed # store new proposals as pending (idempotent); review at /admin/committee-families
Design: docs/committee_families_design.md.
pytest -q
A new windowed widget needs a row in tests/scope_widgets_registry.py and a probe in tests/test_scope_widgets.py; CI runs both.
Devin Oommen — devinoommen.com · Oommen & Company
Released under the MIT License.