Linked Golf

Shipped Feb – Mar 2025

A Flutter golf social and booking app — availability matching, QR buddy adds, PubNub chat, and Stripe-billed event subscriptions — refactored from an inherited, tightly-coupled Bloc/Express codebase into a stable, faster product with new paid-event and team-management features.

Linked Golf shown across multiple phone screens

Built With

Flutter icon Flutter Dart icon Dart Bloc icon Bloc PubNub icon PubNub Stripe icon Stripe Node.js icon Node.js Express icon Express MongoDB icon MongoDB JWT icon JWT FCM icon FCM Firebase Admin icon Firebase Admin SendGrid icon SendGrid Nodemailer icon Nodemailer Google APIs icon Google APIs QRCode icon QRCode Deep Linking icon Deep Linking

Project Overview

Linked Golf is a Flutter golf social and booking app — availability matching against friends, QR-code buddy adds, PubNub chat, and Stripe-billed event subscriptions, behind an Express backend. It was already live and built out by several prior developers by the time this engagement began, but Bloc state management was poorly integrated and tightly coupled to the UI, so state issues surfaced across nearly every core screen — Home, Availability, Add Golf Buddy, the QR profile/scan page, user search, the golfer profile page, and Golf Courses & Events.

Chat had reactions that were wired up but did nothing, and messages weren't grouped by date; the backend itself carried a lot of dead code, tight coupling, and redundant API calls that slowed the app down.

The engagement refactored the Bloc integration and backend screen by screen and module by module, fixed chat reactions/date grouping and comments, repaired the applink/dynamic-link flow, and consolidated the duplicate API calls dragging down performance. On top of stabilizing the existing app, it added new functionality: golf-course owners can now create events, golfers can subscribe to one via Stripe and manage their team, joining a team requires OTP verification, and a course's profile page now surfaces which golfers are available to play. The result is a noticeably faster, more stable app on both the App Store and Google Play, plus a new paid-event capability for golf-course owners that didn't exist before this engagement.

Linked Golf splash screen with the app logo over a putting green
Linked Golf splash screen with the "Let's Golf." tagline
Welcome screen with a golf course illustration and sign up with Google, Apple, or email options
User profile screen with name, location, age, bio, and availability sections
Availability screen for a selected day showing an empty golf buddies state and a prompt to invite friends
Availability calendar for August 2026 with a marked available day
Availability detail panel with preferred golf course, round format tags, and golfers needed
Chat inbox with direct messages and a group chats coming soon section
Courses discover list for Philadelphia with nearby golf clubs and follower counts
Golf course profile page with ratings, reviews, photos, and contact details
My Golf Buddies list with mutual buddy counts and an invite friends banner
Empty chat conversation state
Account settings screen with name, location, and a blocked users list
Challenge
Linked Golf was already live and had been built out by several prior developers by the time this engagement began. Bloc was in place for state management, but poorly integrated and tightly coupled to the UI, so state bugs surfaced across nearly every core screen — Home, Availability, Add Golf Buddy, the QR page (for showing a profile QR and scanning another golfer's), user search, the golfer profile page, and Golf Courses & Events all had their own state issues. Chat, built on PubNub, wasn't working reliably either: message reactions were wired up but did nothing, and messages weren't grouped by date. The Express backend had accumulated a lot of dead code and tight coupling of its own, and several screens fired redundant, duplicate API calls that slowed the app down. On top of stabilizing all of that, golf-course owners had no way to create events, golfers had no way to subscribe to one or manage a team once subscribed, joining a team had no verification step, and a course's profile page didn't surface which golfers were available to play.
Solution
Refactored the Bloc integration and decoupled the UI from it screen by screen — Home, Availability, Add Golf Buddy, the QR profile/scan page, user search, the golfer profile page, and Golf Courses & Events — fixing the state bugs each had been carrying. On the backend, removed dead code, broke apart tightly coupled modules, and consolidated the redundant API calls that had been slowing the app down. Fixed chat end to end: reactions now actually apply instead of no-op, and messages are grouped date-wise; comments were fixed too. The applink/dynamic-link flow that had never worked correctly was repaired so shared content routes into the right in-app screen. On top of the refactor, added new functionality: golf-course owners can now create events, golfers can subscribe to an event after paying through Stripe and manage their team once subscribed, joining a team requires OTP verification, and a course's profile page now shows which golfers are available to play.
Impact
The refactor turned an already-live but fragile app into a stable one — the state, chat, and redundant-API-call issues affecting nearly every core screen were resolved, and backend cleanup plus fewer duplicate API calls gave the app a real, noticeable performance improvement. On top of stabilizing the existing product, the new event-creation, Stripe-billed subscription, team-management, and OTP-verified team-join features gave golf-course owners a way to run paid events directly through the app — a capability that didn't exist before this engagement — while the fixed applink/dynamic linking and chat brought the existing social features up to a standard the app hadn't previously met.

Frequently Asked Questions

Golfers had no streamlined way to match availability with friends, connect with new playing partners, and subscribe to golf-course events — and golf-course owners had no way to create or monetize those events themselves.

Linked Golf was built with Flutter, Dart, Bloc, PubNub, Stripe, Node.js, Express, MongoDB, JWT, FCM, Firebase Admin, SendGrid, Nodemailer, Google APIs, QRCode, Deep Linking.

This was built as commercial/client work, so the source code isn't publicly available. Get in touch to discuss the implementation.

It was already live and built by several prior developers, but Bloc state management was poorly integrated and tightly coupled across nearly every core screen, chat reactions were non-functional, and the backend carried dead code and redundant API calls.

State bugs across Home, Availability, Add Golf Buddy, the QR profile/scan page, user search, the golfer profile page, and Golf Courses & Events were fixed, backend dead code and duplicate API calls were cleaned up, and chat reactions and date-wise grouping now work correctly.

Course owners can create events directly in the app, and golfers can subscribe to one after paying through Stripe and then manage their team once subscribed.

Joining a team requires OTP verification, added during this engagement alongside team management for event subscribers.

A QR-code scan lets two golfers add each other as buddies right after a round, instead of trading contact details by hand.

Yes — it's deployed on both the Apple App Store and Google Play.

Available for work

Got a project like this
in mind?

Let's talk about what you're building and how I can help ship it.