CASE STUDY: MOBILE APP

Racing Hospitality App: One Codebase, Any Team

A white-label mobile app platform for professional racing teams. Not a one-off build, but a reusable product currently powering Juncos Hollinger Racing's, American Communication Construction's, and CEDO Apps' fan and VIP hospitality experience.

  • React Native
  • Expo
  • Strapi CMS
  • Multi-Client / White-Label
  • Real-Time Chat

Built in collaboration with Alexander Bisant (Backend Engineer).

SCREENSHOT PENDING
Home screen / race countdown

One Codebase, Any Team

This isn't built for one client. It's built to be re-skinned for virtually any client. Every team runs on the same core app, driven by a per-client configuration layer that controls branding (light and dark theme, logos, app icons), platform metadata (bundle IDs, app store listings), and backend endpoints (CMS content, chat, push credentials). All without touching a single line of the app itself.

Right now that architecture runs three brands from one codebase: the CEDO Apps reference build, Juncos Hollinger Racing's hospitality app, and American Communication Construction's hospitality app. Onboarding the next racing team, or any hospitality brand with fans, VIPs, and a venue, means writing a config file, not forking a repo.

That same modularity is what makes the feature set flexible: a smaller team that doesn't need VIP ticketing or a livestreamed fan chat can ship a lighter build with those modules scoped out, while a flagship team gets the full suite. It's architected to be catered, not one-size-fits-all.

SCREENSHOT PENDING
White-label theming: two brands, one codebase

What's Inside

Live Race Schedule & Countdown

Dynamic countdown timers to the next race weekend, with practice, qualifying, and race times pulled from the live schedule feed.

Driver & Team Profiles

Biographies, achievements, and social links for every driver, plus full team branding and car details.

Car Gallery

High-resolution showcase of team cars, swappable per season, livery, or sponsor deal.

Interactive Track Map

Venue layout, coordinates, and track-specific details for every stop on the calendar.

VIP Experience Booking

Fans browse, book, and manage exclusive hospitality passes and credentials right from the app.

QR Code Check-In

Every attendee gets a personal QR badge; staff scan it in-app for fast, contactless access at the gate.

Real-Time Fan Chat

Stream Chat-powered messaging so fans can talk race weekend live, with typing indicators, reactions, and read receipts included.

Push Notifications

Race alerts and VIP updates land in a custom in-app notification tray, not just an OS banner that gets missed.

Staff Directory & Directions

Who to find on-site, and how to get there. Built for the reality of a race weekend, not just the couch.

Onboarding & FAQ

A guided welcome video and FAQ so new fans and guests are oriented in under a minute.

SCREENSHOT PENDING
Race schedule
SCREENSHOT PENDING
Team & driver profiles
SCREENSHOT PENDING
Interactive track map
SCREENSHOT PENDING
VIP experiences
SCREENSHOT PENDING
Fan chat
SCREENSHOT PENDING
QR check-in

Under the Hood

Built with React Native and Expo for a single codebase across iOS, Android, and web, backed by a Strapi CMS for content and a Node.js service on Railway for auth, chat tokens, and push credentials. Live race data (optionally) comes from SportRadar; real-time messaging runs on Stream Chat; builds and over-the-air updates ship through EAS.

  • React Native (Expo)
  • TypeScript
  • Expo Router
  • Strapi CMS
  • Node.js on Railway
  • Stream Chat
  • SportRadar API
  • EAS Build & OTA Updates

A long shot: If anyone from Porsche happens to be reading this, I'd gladly trade the time and work that went into this app for a GT3. I'm not holding my breath, but I figured it doesn't hurt to ask.

Have an idea outside the usual website?

I build custom software for just about any use case not just marketing sites. Mobile apps, internal tools, white-label platforms, CMS-backed products, whatever the problem calls for. If you've got something specific in mind, let's talk about it.

Let's Talk