Flask poll app for the Hi-Acts 3rd Network Meeting at DESY Hamburg, 10 June 2026. Includes 11-question poll, live D3 bubble chart display, 7-page PDF analysis report, admin dashboard, and CSV export. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.8 KiB
Conference Poll — Hi-Acts 3rd Network Meeting
Developed by TXproducts | June 2026
What this is
A self-paced live polling web app for the Hi-Acts 3rd Network Meeting at DESY Hamburg (10 June 2026).
Attendees scan a QR code, answer 10 questions on their phone, and can view live results afterwards. Results update automatically every 2.5 seconds.
File structure
conference_poll/
├── app.py Main server file (questions, routes, logic)
├── requirements.txt Python dependencies
├── static/
│ ├── attend_qr.png QR code image shown on the join slide (replace before go-live)
│ └── logo.svg TXproducts logo
└── templates/
├── poll.html Attendee poll page (phone/tablet friendly)
├── join.html QR code beamer slide (desktop, shown on projector)
├── display.html Live results page (bubble chart + per-question analysis)
├── question_view.html Single question bubble chart (linked from display page)
└── admin.html Internal raw results view (not public-facing)
Pages
| URL | Purpose | Who sees it |
|---|---|---|
/ |
Attendee poll | Everyone who scans the QR |
/join |
QR code slide | Shown on projector/beamer |
/display |
Live results with bubble chart | Anyone with the link |
/q/1 — /q/10 |
Per-question bubble chart | Linked from display page |
/admin |
Raw response counts | Internal only |
How to run locally (for testing)
Requirements: Python 3.10 or higher
cd conference_poll
pip3 install -r requirements.txt
python3 app.py
Then open http://localhost:5001 in a browser.
Deployment instructions
Recommended setup (Bluehost VPS or equivalent)
-
Upload the entire
conference_poll/folder to the server -
Install dependencies:
pip3 install -r requirements.txt pip3 install gunicorn -
Run with Gunicorn (production-grade server):
gunicorn -w 2 -b 0.0.0.0:80 app:appOr on port 443 with SSL if HTTPS is configured.
-
The app will be accessible at the server's public IP or domain.
Before go-live checklist
- Generate a new QR code pointing to the live URL (e.g.
https://poll.txproducts.de) - Replace
static/attend_qr.pngwith the new QR code image - Update the URL pill in
templates/join.html(search forpoll.txproducts.de) - Restrict access to
/adminso it is not publicly accessible (basic auth or IP whitelist) - Consider adding a database for persistent storage (see note below)
Important: data persistence
Currently all responses are stored in memory. If the server restarts during the event, all data is lost.
For production, the answers dictionary in app.py should be replaced with a simple SQLite or PostgreSQL database. The relevant section is clearly marked in app.py with the comment "IN-MEMORY DATA STORE".
Security notes
- The
/adminpage has no authentication. Restrict it at the server level before deployment. - The Flask
secret_keyinapp.pyshould be changed to a long random string for production. - The demo routes (
/demo/stream,/demo/status,/submit_demo) are safe to leave in but can be removed if preferred.
Changing questions (content owner: TXproducts)
Questions are defined in app.py in the QUESTIONS list. The web dev team does not need to touch these. The TXproducts team manages question content directly.
After any question change, the QUESTIONS array in templates/display.html (inside the <script> tag) must also be updated to match. Both lists are clearly commented.
Contact
Developed by McKinley Black, TXproducts internship 2026. Questions: mblack@txproducts.de