A static web app that analyzes GitHub comment reactions and detects voting conflicts. Paste a GitHub comment link, and it will fetch all reactions, map each user to their assigned entity (country, company, team, etc.), and alert on conflicts.
No backend required — uses the public GitHub API and runs entirely in the browser.
✅ Parse GitHub Comments - Paste any GitHub issue comment link
✅ Public API - No authentication required
✅ Flexible Entity Mapping - Map users to countries, companies, teams, or any label
✅ Flag Display - Automatically renders flag emojis for ISO country codes
✅ Conflict Detection - Alerts when multiple users share the same entity
✅ Unknown User Alerts - Warns when a reacting user is not in the voter list
✅ Live Statistics - Thumbs up/down counts and duplicate totals
✅ Color-Coded Display - Red rows for conflicts, yellow for unregistered users
You can either upload a CSV file directly in the app, or create a local file.
Option A: Upload CSV via the Browser (Easiest)
- When you open the app, if
voting_data.csvis not found, an upload form will appear - Select your CSV file and click 📤 Upload
- The app will load the data and remember it for the session
Option B: Create a Local File
Copy the example file and fill in your participants:
cp voting_data.example.csv voting_data.csvEdit voting_data.csv with your GitHub usernames and their assigned entity:
GitHub Name,Voting for
alice,CompanyA
bob,CompanyB
carol,CompanyAEntities can be:
- ISO country codes (SI, NL, DE, …) → displayed with flag emoji automatically
- Any text (company name, team, group) → displayed as plain text
voting_data.csv is loaded via fetch(), so the page must be served over HTTP (not opened as file://).
Python 3:
python -m http.server 8000Then open: http://localhost:8000/voting-validator.html
Node.js (via npx):
npx http-serverCreate a repository from this template-repository. You can configure default voting data creating a voting_data.csv file.
⚠️ voting_data.csvis in.gitignoreby default to protect participant data.
Add it to your push only if the data is safe to make public.
Enable GitHub Pages in repository Settings → Pages → Deploy from main branch.
App will be live at: https://YOUR-USERNAME.github.io/YOUR-REPO/voting-validator.html
-
Get a GitHub Comment Link
- Open any GitHub issue, scroll to a comment
- Click the "..." menu on the comment → "Copy link"
- Example:
https://github.com/owner/repo/issues/123#issuecomment-456789
-
Paste & Analyze
- Paste the link into the input field and click 🔍 Analyze
-
Read the Results
- ✅ Green Alert: No conflicts, all users registered
⚠️ Yellow Alert: One or more reacting users are not invoting_data.csv- ⛔ Red Alert: Multiple users from the same entity reacted
├── voting-validator.html # Main application (open in browser)
├── voting_data.example.csv # Template — copy to voting_data.csv and fill in
├── voting_data.csv # Your actual voter list (gitignored)
├── .gitignore
└── README.md
Any two-letter ISO 3166-1 alpha-2 code that maps to a flag emoji will render automatically.
To add more, extend the COUNTRY_FLAGS object at the top of voting-validator.html.
- Rate Limit: 60 requests/hour per IP (unauthenticated public API)
- Works with: Public repositories only
- Reactions per request: Up to 100 (pagination not implemented)
CSV not loading / "no data" message
- Open via
http://localhost:8000— notfile://directly - Verify
voting_data.csvexists in the same directory as the HTML file - Check the browser console (F12) for fetch errors
No reactions found
- Confirm the comment URL includes
#issuecomment-XXXXXXXXX - Make sure the repository is public
Rate limit hit (403)
- Wait an hour, or add a GitHub token to the request headers
Made with ❤️ for voting transparency