Skip to content

From the final whistle to the pool board

Understand the system. Keep the pool running. Ship with confidence.

Find what you need

Start hereWhat you’ll find
Understand the systemFollow scores from ESPN through Azure Functions to the board and email.
Set up AzureConnect hosting, results, private state, email, and GitLab identity.
Maintain the websitePlayer selection, board orientation, refresh, and assets.
Ship a changeChecks, dependency locks, and deployment gates.

Three independently published surfaces

SurfaceHosted byPurpose
Pool websiteAzure Static Web AppsDisplays players, squares, results, and earned prizes
Latest results and daily snapshotsAzure Blob StorageSupplies the website with JSON produced by the Function
This documentationGitLab PagesExplains 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.