factcircuit
FactCircuit: an auditable claim-and-evidence verification loop with immutable provenance, staged checks, bounded retrieval, and reproducible evaluation.
Private, local voter CSV search, filtering, analytics, and A4 reporting.
Translation pending
DataPython · HTMLGitHub @vishalnagda1OnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Offline voter CSV explorer and validated PDF-to-CSV converter
Translation pending
Taken from the repository README
Loading the full README. The saved excerpt is shown below.
A private-by-design, browser-based dashboard for searching, filtering, analyzing, printing, and exporting Rajasthan municipal voter-list CSV files.
The dashboard runs entirely in the browser. Selected CSV files are not uploaded to a server, and voter PDFs, generated CSVs, validation reports, and local environments are excluded from this repository.
Browser preferences such as filters, column order, sorting, and print settings are saved locally. Voter records themselves are not saved in browser storage.Read the full README ↗A private-by-design, browser-based dashboard for searching, filtering, analyzing, printing, and exporting Rajasthan municipal voter-list CSV files.
Live dashboard: https://voter.vishalnagda.dev
The dashboard runs entirely in the browser. Selected CSV files are not uploaded to a server, and voter PDFs, generated CSVs, validation reports, and local environments are excluded from this repository.
Browser preferences such as filters, column order, sorting, and print settings are saved locally. Voter records themselves are not saved in browser storage.
Surname analytics reports names exactly as recorded and must not be treated as verified caste identification.
.
├── dashboard/index.html # Standalone browser dashboard (deployed to GitHub Pages)
├── src/voter_converter/ # PDF → CSV converter package
│ ├── converter.py # Extraction, OCR, transliteration, validation, CLI
│ └── data/transliteration_overrides.json
├── scripts/ # setup_voter_converter.sh, run_voter_converter.command
├── tests/ # unittest suite
├── data/ # Local voter PDFs/CSVs (git-ignored)
├── .github/workflows/pages.yml # Dashboard deployment
└── pyproject.toml
Open dashboard/index.html directly in a modern browser and select the generated CSV files. No server or Python environment is required for the dashboard.
The repository also includes the voter_converter Python package (src/voter_converter/), an offline converter for the supported Rajasthan municipal voter-roll PDF layout. Install uv, then double-click scripts/run_voter_converter.command (it runs first-time setup automatically). Its interactive menu can either extract PDFs into CSV files or refresh English transliteration in existing converter CSV files without rerunning PDF extraction or OCR.
Every successful conversion produces a UTF-8 CSV and a validation report. Verified preferred spellings come from src/voter_converter/data/transliteration_overrides.json; other English names use deterministic Hindi-name rules and remain flagged for review before official use.
Roll type, municipality or panchayat name, ward, and part metadata are detected from the PDF header using OCR cross-checked against the embedded text layer. PDF filenames are not required to follow a convention; a matching conventional filename may only enrich a location label after the document content confirms it. Explicit command-line metadata options remain available as authoritative overrides.
Voter rolls group cards by locality and print the area, such as पाटीदारों का मोहल्ला, करणपुर, as a heading above the first card row of that area. A heading stays in force across page breaks until the next one. The converter locates these headings in the PDF text layer and reads them with OCR. Every printed instance of the same heading receives one reading. Each row carries:
house_number_or_address: the house number from the voter's card (390).area_hindi / area_english: the area heading above the card.full_address_hindi / full_address_english: the house, area, gram panchayat or municipality, panchayat samiti, and district, with repeated place names removed (390, पाटीदारों का मोहल्ला, करणपुर, वल्लभनगर, उदयपुर → 390, Patidaron Ka Mohalla, Karanpur, Vallabhnagar, Udaipur).The validation report's address section lists every detected area with its voter count, which makes OCR misreadings easy to spot.
For the best transliteration data, filter the dashboard to english_name_needs_review = Yes, review the most frequent Hindi words first, and add each confirmed spelling to src/voter_converter/data/transliteration_overrides.json. Prefer reusable word entries such as "भंवर": "Bhanwar" over a full-name entry such as "भंवर लाल": "Bhanwar Lal"; the word entry also fixes भंवर सिंह and other combinations. Keep full-name entries only when the spelling genuinely changes in that exact combination. Then choose Update English transliteration in existing CSV files in the converter menu. By default it updates only blank or review-needed English names and preserves already reviewed rows.
After setup, the converter can also be run directly:
.venv-voter/bin/python -m voter_converter data/PDFs --output-dir data/CSVs
.venv-voter/bin/python -m unittest discover -s tests