
Building MenuScores
How I built MenuScores: from idea to product.
Overview
MenuScores is a lightweight macOS menu bar app that brings sports and scores right to your desktop.
Goals and Motivation
MenuScores was created to solve a personal need: a fast, non-intrusive way to follow my favorite sports without relying on bloated apps, slow websites, or distracting platforms. I wanted something that lives quietly in the menu bar, provides real-time updates, is configurable, and sends useful alerts when games start or finish.
Most sports apps and websites are ad driven, mobile only, and overloaded with unnecessary information and features. I just wanted something simple that could work on my Mac, and let me follow a game without having to open a website or pick up my phone.
A top priority was to build something that felt truly native to macOS: fast, clean, and lightweight. To make this happen, I challenged myself to learn Swift and SwiftUI by building a real world and useful tool, and thats how MenuScores came to life.
Features

- Live Menubar Scores - Pin games to your menu bar and receive real-time score updates available at a glance.
- Smart Notifications - Get notified when a pinned game starts or finishes.
- League Control - Choose which leagues are shown and stay focused on the sports you care about.
- Configurable - Configure notification types and refresh intervals to fit your preferences.
- Lightweight & Native - Built with Swift and SwiftUI for fast performance and seamless macOS integration.
Supported Leagues

- NHL
- NBA
- WNBA
- Men's College Basketball
- Women's College Basketball
- NFL
- MLB
- F1
- PGA
- LGA
- UEFA – UEFA Champions League
- EPL – English Premier League
- ESP – La Liga (Spain)
- GER – Bundesliga (Germany)
- ITA – Serie A (Italy)
- NLL
Installation
Requires macOS 13.0 and later
- Download the latest release
- Move the app to your Applications folder
- Run the app.
Note: On first launch, macOS may warn that the app couldn't be verified. Click OK, then go to System Settings → Privacy & Security, scroll down, and click Open Anyway to launch the app.
Usage

-
After running the app, you'll be greeted with a walkthrough that will provide information about the different features of the app, and security and privacy concerns.
-
In order to use the notifications feature, you must grant permission for MenuScores to send notification. An option will be presented to do so in the walkthrough screen.
-
Clicking on the menubar title will show a list available leagues.
-
Hovering over a league will show a dropdown of all the games for the day in that league.
-
Clicking on a game will pin it.
-
You can use the clear set game option, or click on a different game to clear the title.
-
You can quit the app directly from the menubar, or open the preferences window to configure app behaviors (this can be done by pressing Cmd + , after opening the menubar component, or clicking the preferences button if your on macOS 14.0 and later).
Dependencies
Links
Tech Stack Used
- Swift
- SwiftUI
Challenges and Solutions
One of the biggest challenges in building MenuScores was designing a real time experience that was lightweight. I needed to fetch and process live sports data at regular intervals without overwhelming the CPU or battery. To solve this, I built a configurable update system that tracks only the selected game and uses Swift’s async/await with efficient state comparisons.
Another key challenge was ensuring the app felt truly native to macOS. Many similar apps are Electron-based and feel out of place, and rely more heavily upon system resources. I intentionally built MenuScores in Swift and SwiftUI, working with macOS frameworks like MenuBarExtra, UserNotifications, and UserDefaults to create an experience that blends seamlessly with the OS.
Learning Swift as I went proved to be difficult especially with the different nuances of Swift compared to other languages and frameworks such as Javascript and Typescript. By working through the challenges and diving into documentation and examples, I developed a deeper understanding of Swift and applied what I learned to my app.
Conclusion

MenuScores started as a small personal project, but it’s grown into something I’m excited to share. I built it to solve a problem I had, and if it happens to solve that same problem for you, even better. I’m excited to continue refining it and welcoming any feedback along the way. This experience has taught me a lot, and I'm excited to continue to build solutions to real problems.
Published: 2025-05-18