The anchor for the AI Winter School Day-3 workshop. Three pages:
| Page | What it does |
|---|---|
| 🌱 Home | winter-school welcome + the one-line goal |
| 🧭 The Flow | the paper & data, an example pipeline, model speed tiers, "build it in any framework" |
| 🏁 Results | attendees post their score (text only) → a shared wall |
The Results wall has two backends and picks automatically:
- No secrets → local SQLite (
data/results.db). Zero setup — great for rehearsing. - Secrets present → shared Google Sheet. Everyone posts to one always-on wall.
cd challenge_app
python -m venv .venv && . .venv/Scripts/activate # Windows; use bin/activate on macOS/Linux
pip install -r requirements.txt
streamlit run Welcome.pyOpen http://localhost:8501, walk the three pages, and post a test result on
🏁 Results. It saves to data/results.db and survives a restart. Delete that file to reset the wall.
- Push to a public GitHub repo (Streamlit Cloud deploys from GitHub). This app folder can be the repo
root, or point the deploy at
challenge_app/Welcome.py. - Create the shared Google Sheet + service account:
- New blank Google Sheet — this is the class wall.
- Google Cloud Console → enable the Google Sheets API → create a Service Account → add a JSON key.
- Share the Sheet as Editor with the service account's
client_email.
- Add the secrets: on share.streamlit.io, open your app → Settings → Secrets, and paste the contents of
.streamlit/secrets.toml.examplefilled in with your Sheet URL and key. - Redeploy. The Results page footer will now read "Google Sheet (shared)." Submit from two devices to confirm both land on the same wall.
Results are text only (nickname, dataset, model, r, note) — no image uploads — so the shared Sheet stays light and always works. If someone wants to show the tool they built, they share their screen live.
Run locally and expose one URL to the room with a free tunnel:
streamlit run Welcome.py # terminal 1
cloudflared tunnel --url http://localhost:8501 # terminal 2 -> prints a public https URLEveryone opens that URL and posts to your laptop's SQLite wall.
challenge_app/
├── Welcome.py # 🌱 Home (welcome)
├── assets/winter.png # header image
├── pages/
│ ├── 2_🧭_The_Flow.py # paper, data, example pipeline, speed tiers
│ └── 3_🏁_Results.py
├── lib/
│ ├── data.py # EasyGeSe species, paper, benchmark, model lists
│ └── storage.py # SQLite ↔ Google Sheet dual backend (text only)
├── requirements.txt
├── README.md
└── .streamlit/
├── config.toml
└── secrets.toml.example