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>
115 lines
3.8 KiB
Markdown
115 lines
3.8 KiB
Markdown
# 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
|
|
|
|
```bash
|
|
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)
|
|
|
|
1. Upload the entire `conference_poll/` folder to the server
|
|
2. Install dependencies:
|
|
```bash
|
|
pip3 install -r requirements.txt
|
|
pip3 install gunicorn
|
|
```
|
|
3. Run with Gunicorn (production-grade server):
|
|
```bash
|
|
gunicorn -w 2 -b 0.0.0.0:80 app:app
|
|
```
|
|
Or on port 443 with SSL if HTTPS is configured.
|
|
|
|
4. 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.png` with the new QR code image
|
|
- [ ] Update the URL pill in `templates/join.html` (search for `poll.txproducts.de`)
|
|
- [ ] Restrict access to `/admin` so 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 `/admin` page has no authentication. Restrict it at the server level before deployment.
|
|
- The Flask `secret_key` in `app.py` should 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
|