Spaces:
Configuration error
Download README.md from AITestingWorkSpace/BOU_2026: direct link, hf CLI and curl.
- Browser
- Download file 2.42 kB
-
https://huggingface.co/spaces/AITestingWorkSpace/BOU_2026/resolve/main/README.md
- Command line
-
hf download hf://spaces/AITestingWorkSpace/BOU_2026/README.md
-
curl -L -o README.md https://huggingface.co/spaces/AITestingWorkSpace/BOU_2026/resolve/main/README.md
BOU 2026 β Best Project voting app
A small self-hosted voting app for the 7 BOU 2026 projects. Every vote is written as a row (Name, UID, Email, Project, Timestamp) into an Excel file on the server β no external database needed.
What's included
server.jsβ Node/Express backend. Handles voting and keepsdata/votes.xlsxup to date.public/index.htmlβ the page voters use.public/admin.htmlβ organizer-only results page (tallies + Excel download), protected by an admin key.data/votes.xlsxβ created automatically on the first vote. Not included β don't commit it, it contains personal data (names/UIDs/emails).
Requirements
This needs a Node.js host with persistent disk storage β it writes to a real file, so it won't work on static hosting (GitHub Pages, S3, etc.) or on serverless platforms whose filesystem resets between requests (e.g. Vercel/Netlify functions). It runs fine on a VPS, an internal company server, Render/Railway "web service" (not "static site"), or any machine you control. Node.js 18+ is recommended.
Setup
npm install
ADMIN_KEY="pick-a-real-secret" npm start
The app listens on port 3000 by default (override with PORT=xxxx).
- Voters go to:
http://your-host:3000/ - You (organizer) go to:
http://your-host:3000/admin.htmland enter theADMIN_KEYyou set above to see live results and download the Excel file.
Set a real ADMIN_KEY before sharing the link with anyone β anyone who knows
the key can see all voters' names/UIDs/emails and the current tally. Without it set,
the server starts with a placeholder key and prints a warning.
How voting works
- A voter fills in Name, UID, and Email, then picks one project and submits.
- Votes are matched by UID: if the same UID votes again, their row is updated (their vote changes) rather than duplicated β so one person can't stack votes.
- Writes are queued in the server so two people voting at the same instant can't corrupt the Excel file.
Changing the project list
Edit the PROJECTS array near the top of server.js (and nowhere else β the
voting page loads the list from the server automatically).
Privacy note
The Excel file holds personal data (name, UID, email) for every voter. Store it somewhere access-controlled, delete it once the vote is over if you don't need to retain it, and don't commit it to a public repo.