Rack

WATCH → PHONE · iOS + watchOS · TESTFLIGHT

Live stroke tracking for pool players.

An Apple Watch on your cueing arm, streaming every shot to your phone.

Rack on Apple Watch: the Start Shot screen
Rack on iPhone: a practice session with the live trace streaming from the watch

01 · What it does

Play. It records.

Rack on iPhone: a practice session with the live trace streaming from the watch

Live from the wrist

Every stroke streams to your phone as you play.

Rack on Apple Watch: Made and Missed buttons that end a shot

Log from the watch

Made or missed, one tap. Your phone stays in your pocket.

Screenshot coming

Review sessions

Every shot, every session, on a calendar.

Screenshot coming

Backed up

Sessions upload to the cloud when you choose.

02 · How it's built

One live pipeline, wrist to cloud.

Architecture: the Apple Watch streams live to the iPhone; the iPhone syncs to the API (Elixir and Phoenix on Postgres), which stores session files in S3; the Next.js web app talks to the same API.liveApple WatchwatchOS · 50 Hz captureiPhoneSwiftUI · offline SQLiteAPIElixir / Phoenix · PostgresStorageS3 · presigned uploadsWebNext.js · this site

03 · Engineering

Built like it has to keep working.

Versioned wire contracts

Watch ↔ phone message formats are locked by tests, so older builds keep working.

CI across three languages

Swift, Elixir and TypeScript build and test on every pull request.

Merge → TestFlight

Xcode Cloud ships every merge to main.

Traceable data

Every shot records the app and watch build that captured it.

Commits
400+
Merged PRs
34
Platforms
3
Languages
3
  • Swift 6
  • SwiftUI
  • GRDB
  • Elixir
  • Phoenix
  • Postgres
  • Next.js
  • Fly
  • Neon