Skip to main content
← Back to Projects Screenshot of The Wee Table

The Wee Table

A production-style iOS WidgetKit app for SPFL standings, backed by a resilient Cloudflare Worker with multi-source ingestion and layered caching.

Swift SwiftUI WidgetKit AppIntents TypeScript Cloudflare Workers Cloudflare KV Swift Package Manager

I built The Wee Table for myself first. I am a Scottish football fan, and I wanted a fast, clean way to check SPFL standings without bouncing between slow pages and inconsistent feeds. Outside Scotland, these leagues are often treated like an afterthought, so I decided to build the tool I wished existed and make it useful for other fans too.

The project became an iOS app + home screen widget focused on SPFL standings and fixtures.

The app includes four tabs:

  • Table: Full division tables with team drill-down views
  • Stats: Derived division metrics and leader context
  • Predict: A “what-if” simulator based on upcoming fixtures
  • Settings: Widget setup guidance and badge visibility preferences

The widget is configurable through AppIntent parameters, allowing people to select division and display mode (top-of-league vs team-context view), across small, medium, and large widget sizes.

On the backend, I built a TypeScript Cloudflare Worker API that aggregates standings and fixtures from multiple independent providers with a priority-based failover strategy.

If a provider is delayed, degraded, or changes format, the API automatically falls through to the next source and serves the best available dataset.

This design prioritises reliability over single-source trust, with layered caching across Worker KV, shared app/widget UserDefaults, and a file-based badge image cache for widget-safe rendering.

The core engineering outcome was a fast, glanceable product that remains useful even when upstream data is inconsistent or temporarily unavailable.