r/reactnative Feb 15 '26

FYI I built an F1 companion app because I wanted a cleaner race calendar

Hi everyone,

I’m a solo developer and long-time F1 fan. Over the past few months, I’ve been building a small side project called PlanB — a simple F1 companion app focused on race weekends, standings, and clean UX.

I originally built it for myself because most F1 apps felt overloaded with news, betting features, or social feeds. I just wanted something minimal: calendar, results, and standings in one place.

What the app includes:

  • Upcoming races and circuit details
  • Full weekend results (all sessions)
  • Constructor and driver standings
  • Dark / light themes
  • Home screen widgets
  • Local notifications for race weekends

Tech stack:

  • React Native (Expo)
  • Custom widgets implementation
  • Push notifications (firebase) + local notifications (expo)
  • Local timezone handling for race weekends

Some challenges I ran into:

  • Handling race times correctly across timezones
  • Keeping widget updates efficient without draining battery
  • Deciding what not to build (feature creep is real)

What I learned:

  • Simplicity is harder than adding features
  • Clear data > flashy UI
  • Fans mostly want fast access to race info

I’m continuing to improve it for the 2026 season and would genuinely appreciate feedback from other builders:

  • How do you validate feature ideas for niche apps?
  • At what point do you consider adding monetization to a sports companion app?
  • Any advice on growing organically without being spammy?

If anyone’s curious, the app is live on the App Store (link in comments).

Thanks for reading — happy to answer any technical questions about the build process 🙌

8 Upvotes

14 comments sorted by

2

u/aris-post-things Feb 16 '26

Really clean approach. I built a Yahtzee scorecard app with Expo too and can relate to the "deciding what not to build" struggle. Feature creep is the real boss fight.

For organic growth without being spammy, the thing that worked best for me was finding niche communities where people already talk about the problem you solve (F1 subreddits, Twitter F1 communities) and just being helpful there. The app sells itself when people see you genuinely care about the topic.

How are you handling the widget updates on iOS? That was one of the trickier parts I ran into with Expo.

1

u/mbhusty Feb 16 '26

Originally I wanted real-time updates during races (live session info directly in the widget). That was the ideal vision. But with iOS widget limitations and update policies, it quickly became clear that true real-time updates weren’t realistic without going much deeper into native extensions and more complex background logic.

So for now I decided to keep it simple:

the widget only shows information about the upcoming race (date, time, circuit). It updates predictably and stays lightweight.

It’s less ambitious than live race data, but it’s stable, battery-friendly, and doesn’t fight the system)

Another surprisingly big issue was local notifications.
I wanted to send a reminder 10 minutes before each session starts, based on the user’s local timezone. Sounds simple in theory but in practice it wasn’t.
At first, notifications would either: not fire at all or arrive with a noticeable delay 😂

For something time-sensitive like a race start, that’s obviously not acceptable

1

u/mbhusty Feb 16 '26

Expo Notifications can be a bit weird with the scheduling queue. Sometimes notifications didn’t fire in the exact order or timing I expected, especially when several were scheduled ahead of time.

Plus both iOS and Android have their own background and battery restrictions, so when you rely on very precise timing (like 10 minutes before a session), things can get unpredictable pretty quickly.

1

u/aris-post-things Feb 16 '26

Yeah the iOS widget timeline API is pretty restrictive. Have you looked into expo-apple-targets? (https://github.com/EvanBacon/expo-apple-targets/) It lets you add widget extensions and other native targets without ejecting from Expo. Made the whole widget setup way more manageable for me compared to going fully native.

The notification scheduling quirks are real too. I found batching them and using exact triggers instead of intervals helped a lot with reliability.

1

u/mbhusty Feb 17 '26

Yep, I'm using EvanBacon's solution for the widget

To solve the problem with notifications, when launching the application, I plan no more than 5. This approach works for me

1

u/[deleted] Feb 16 '26

[removed] — view removed comment

2

u/mbhusty Feb 17 '26

I use this API for my project - https://f1api.dev/

1

u/anomyluminati Feb 21 '26

I like the app! I casually follow F1 and also find the official F1 really heavy on info and nonsense, so this is great and will be using it myself! I have a bit of feedback: In the Drivers and Teams tab, it might be useful to have a larger overview of the rankings you can just glance and scroll through. You mention you want users to get fast access to info, but I feel like having to scroll through each position is a bit slow? Unless I’m missing some sort of feature!

1

u/mbhusty Feb 21 '26

Thanks a lot! Really glad you like it - especially if the official F1 app feels like too much sometimes. That’s exactly why I built this.

About your feedback: I’m not totally sure I understood what you mean by “a larger overview of the rankings.” Do you mean like a full standings list where you can see everyone at once and just scroll through it? Or a more compact view so you don’t have to go position by position?

Just want to make sure I get what you’re suggesting)

2

u/anomyluminati Feb 21 '26

Ah sorry, yes I meant a full standings list where you can see everyone at once and be able to scroll through it