ShippingTestFlight Beta

iOS · TestFlight beta · SwiftUI · Supabase · MapKit · Built with Jaret Priddy · Android planned

PinPals

Find golfers nearby, match, chat, and turn the chat into an actual round.

A native iOS app for finding golf partners and getting rounds on the calendar. PinPals combines golfer discovery, nearby course search, open games, match chat, round proposals, shared scorecards, and a driving-range tracker. It is live in TestFlight beta and looking for testers now; the Android version is planned after the first iOS release is complete.

  • Swift
  • SwiftUI
  • SwiftData
  • Supabase
  • Postgres
  • Row Level Security
  • CoreLocation
  • MapKit
  • Apple Sign-In
  • Google Sign-In
  • TestFlight
PinPals — image 1 of 2
1 / 2

Origin

How it started

Golf has a coordination problem. You can know people who play, know courses nearby, and still struggle to find the right group at the right time. PinPals treats the round as the product: discover nearby golfers, match with compatible players, chat, propose a tee time, join open games, and keep score once the group actually plays.

Features

What it does

  • Golfer discovery and matching

    Profiles track skill level, handicap, drinking preference, pace, preferred tee times, playing frequency, home courses, distance preference, and whether someone is looking to play today. The app surfaces nearby golfers and lets users connect before planning a round.

  • Nearby courses and driving ranges

    CoreLocation and MapKit-backed course discovery find golf venues around the user, calculate distance, support favorites, and open a selected course in Apple Maps.

  • Open games and round proposals

    Users can post public open games or propose private rounds inside a match chat. Rounds carry course, tee time, mode, max players, notes, location, participants, invite status, and host state.

  • Chat that turns into a tee time

    Match conversations and group game chats support round invites, participant acceptance, and routing from upcoming rounds into the right chat so coordination stays tied to the actual game.

  • Scorecards and round history

    SwiftData-backed scorecards handle players, holes, par, scores, relative-to-par calculations, leaderboard, round summary, history, and Supabase sync.

  • Driving range tracker

    A range mode captures recent shot distances, top-three shots, and session summary so the app is useful even when the user is practicing instead of playing a full round.

Under the hood

Engineering

  • Supabase schema with real app boundaries

    The backend schema includes profiles, profile images, swipes, matches, messages, rounds, round participants, conversations, conversation members, conversation messages, round invites, notifications, scorecard rounds, scorecard players, and scorecard hole scores. Row-level security keeps each surface scoped to the right users instead of treating beta data as a free-for-all.

  • Round lifecycle, not just chat

    RoundService separates public open games from private chat-proposed rounds. Public games create group conversations immediately; private two-person rounds stay inside the existing match chat until another player joins. Joining an open game checks that the round is public before adding the participant and conversation member.

  • Native iOS stack with a migration path

    The first release is fully native SwiftUI on iOS with SwiftData for local scorecard state, Supabase for auth/data/storage, CoreLocation and MapKit for course discovery, and Apple/Google/email auth flows. Android is intentionally framed as the next platform after the iOS beta gets through first-release hardening.

  • Beta hardening through TestFlight

    Recent repo history shows TestFlight-focused work: Apple Sign-In, Google Sign-In, password reset, distance filters, UI polish, new app icon, and open-game chat routing. That is the right stage to ask for testers: the product loop exists, and the remaining work is real-user validation and polish.