Belize Lottery

A results app for Belize's five national lotteries. It first reached the App Store in 2018, and version 4.0, rebuilt from scratch in SwiftUI, brings it back in December 2026.

I started it in 2017 so family and friends abroad could check the numbers without calling home. It's my longest-running app, and the one where I've learned the most about keeping software alive for years.

Role
Solo developer: design, code, backend, release
Timeline
2017 to now, first released 2018
Platforms
iPhone, iPad, Apple Watch, widgets, Live Activities
Stack
SwiftUI, SwiftData, Firebase, StoreKit 2, Python, GitHub Actions, fastlane
Status
Version 3 live, version 4.0 rebuild heading to review
Latest Boledo results Ticket and play history Hot and cold number statistics Saved number sets with match badges

The problem

Belize runs five national lottery games: Boledo, Pick 3, Fantasy 5, Jackpot and the Ordinary Lottery, each drawn on its own schedule. Players at home and Belizeans living abroad had no simple way to see the latest numbers, look back at old draws, or check their own tickets. For people abroad, that usually meant calling or messaging someone at home.

What I built

The app shows the latest numbers for every game on one screen, keeps years of past results searchable by date or number, and works offline for recent draws. Players can save their own number sets, log the tickets they buy and have each one checked against its draw, and see what they've spent and won over time.

For version 4.0 I rebuilt everything from scratch in SwiftUI:

  • One codebase for iPhone, iPad and Apple Watch, plus Home Screen and Lock Screen widgets and Live Activities.
  • Results come from a Firebase Realtime Database and are cached on the device with SwiftData, so the app opens fast and works without signal.
  • A "Remove Ads" purchase built on StoreKit 2, and ads that respect the user's privacy consent choices.
  • Localized into 6 languages.
  • A small internal admin app that lets results be published straight to the production database that feeds the app and its notifications.

Hard parts

Getting the results in automatically

The app is only useful if the numbers show up on time. I wrote a Python scraper that runs on 4 GitHub Actions schedules, matched to the draw times, and publishes all five games' results to Firebase. When the upstream source locked its API down, the bot stopped working overnight. I re-engineered it to read from a rate-limited public endpoint instead, pacing its requests so it stays within the limits and keeps publishing reliably.

Releasing without a release team

Shipping an app in 6 languages across iPhone, iPad and Watch means a lot of screenshots and metadata. I automated the whole release with 17 fastlane lanes: code signing, 48 framed and localized screenshots, a scripted App Preview video recorded from the real app, metadata checks before submission, and version bumps. A release runs from a script instead of a long manual checklist.

Rebuilding without losing users

Version 3 has been in people's hands for years. The rebuild had to keep the same results, the same games and the same habits while replacing every line underneath. I kept the old app live and stable the whole time and built the new one alongside it.

Results

  • First released on the App Store in 2018; version 4.0 returns in December 2026.
  • Results publish on their own, on schedule, with no one copying numbers by hand.
  • A complete SwiftUI rebuild covering iPhone, iPad, Apple Watch, widgets and Live Activities.
  • Releases that run from a script instead of a checklist.

See the app's page at Bang Bang Studios, or watch the App Preview video on YouTube.

Where it stands today: version 4.0 is rebuilt in SwiftUI and returns to the App Store in December 2026.

Need an app that runs itself?

If you need results, data or updates delivered to your customers automatically, let's talk about how.

Book a free call

See the iOS app service Next: MyFitZ Back to all work