From the final whistle to the pool board
Understand the system. Keep the pool running. Ship with confidence.
Find what you need
| Start here | What you’ll find |
|---|---|
| Understand the system | Follow scores from ESPN through Azure Functions to the board and email. |
| Set up Azure | Connect hosting, results, private state, email, and GitLab identity. |
| Maintain the website | Player selection, board orientation, refresh, and assets. |
| Ship a change | Checks, dependency locks, and deployment gates. |
Three independently published surfaces
| Surface | Hosted by | Purpose |
|---|---|---|
| Pool website | Azure Static Web Apps | Displays players, squares, results, and earned prizes |
| Latest results and daily snapshots | Azure Blob Storage | Supplies the website with JSON produced by the Function |
| This documentation | GitLab Pages | Explains the system and how to maintain it |
The Python Azure Function is the background worker. It has an hourly timer, not a public HTTP API. The browser reads Blob Storage directly.
flowchart LR
ESPN[ESPN scores] --> Worker[Azure Function]
Worker --> Results[Public results JSON]
Worker --> Email[Winner and summary emails]
Results --> Website[Pool website]
Repo[GitLab repository] --> CI[Validation and delivery]
CI --> Worker
CI --> Website
CI --> Docs[GitLab Pages docs]Current behavior at a glance
- Hourly: the timer decides whether any games need processing.
- Postgame: halftime and final winners are both reported after ESPN marks a game final.
- $50 + $50: default halftime and final prizes, configurable in Azure.
- Tuesday rollover: the website advances the featured week at midnight Eastern time.
- Durable state: email claims and completed games are retained in private storage.
- Independent updates: a new result does not require redeploying the website.
For a problem in production, start with operations and recovery. For assumptions, limitations, and source-code locations, see reference and notes.