Files
beantownbabeandClaude Sonnet 4.6 27a59671fc Initial commit: HiActs Conference Poll app
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>
2026-06-05 15:38:17 +02:00

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