I'm a former professional baseball coach turned product designer, building where sports, technology and design meet.

Designing at Swift, based in Toronto. I bring creative instinct and real-world context to the work — intuitive, engaging experiences, especially in sports tech. Big on storytelling, clean design and figuring things out quickly.

Off the clock: behind a camera, on a dodgeball court. Open to select freelance work.

Case studies

Product Design

Swift · 2026

Swift Booking: one app for every facility

Swift runs bookings for sports facilities. I designed the app their customers use to find a facility, book anything it offers, and get in the door, from the first moodboard to the last design review before release.

Timeline
PLACEHOLDER — dates
Role
Product Design
Org
Swift
With
Swift engineering
Three screens of the Swift Booking app: the home tab with the next session and saved facilities, The WAR Room's facility page, and a youth pitching lesson with its instructors, rules, pricing and add-ons

The brief

Swift's customers are training centres, cages, courts and rinks. Their customers, the players and parents, were the ones who actually had to book, and they needed one app that worked the same at every facility they trained at.

The job was to design it end to end: a home for what's coming up, a way to find and save facilities, booking for everything a facility sells, and everything after, from rescheduling to unlocking the door. I led the design from the moodboard and information architecture through to dev-ready flows, then reviewed the build with engineering until it shipped.

The scope

  • 96 screens in the shipped app, across four tabs and seven flows
  • Six kinds of booking: rentals, lessons, classes, camps, packages and memberships
  • Around 250 dev-ready screens and states in Figma across 14 flows, with 60 more for classes
  • 166 components in the app, built on Swift's own design library
  • Built with five engineers, over 784 commits between March and September 2026
The app's four tabs: home, facility search, My Bookings with upcoming camp sessions, and profile
The four tabs: home, search, bookings and profile.

One shape for six services

The hard part wasn't any one screen. It was that a cage rental, a private lesson, a week-long camp and a monthly membership are different things to buy. Lessons have instructors. Camps have age limits and sign-up deadlines. Memberships bill monthly and prorate the first payment. Rentals come with equipment and add-ons.

Rather than design six apps, I gave every service the same overview, with the rules that matter up front as plain cards (who can book, how far ahead, how many spots are left), then the price and the extras. Booking follows one sequence of steps, and each service only adds the steps it needs: an instructor for a lesson, a player for a camp, credits for a package. Learn one, and you've learned them all.

A lesson booked end to end: the lesson overview, choosing a time with two items in the cart, checkout with payment details and a discount code, and the booking confirmation
A lesson, booked: choose a time, check out, done.

A cart that comes with you

Most bookings are more than one thing: two time slots, a cage, a pitching machine. So the cart rides along at the bottom of every step as a small bar, showing what's in it and the running total, and opens into a full sheet when you want to change something.

Because it appears in every flow, it has to handle every case. I specified each state for engineering, down to the ones that are easy to miss: a credit covering a slot, a discount striking through the old total, a rental where the price can't be known until a time is chosen, and reschedule mode, where items are locked and there's nothing to pay.

Seven states of the expanded cart: time slots only, equipment and time slots, the full cart with add-ons, a discount applied, a credit used, pricing not yet available, and reschedule mode
Seven states of the cart sheet, laid out for engineering.

Before and after the booking

A booking app is judged on the moments around the booking too. Guests can browse any facility without an account, and are only asked to sign in when they go to book, with a one-time code instead of a password. Parents can book for their kids from the same account.

After booking, everything lives in one place: the details, the price, reschedule and cancel. At facilities with door access, the booking becomes the key. An access link opens shortly before the session, and unlocks the door from the phone.

Managing a cage rental, with its participant, time, equipment, add-ons, price and access link, beside the facility access screen with an Unlock door button
Manage a booking, then let yourself in.

Working with engineering

With five engineers building in parallel, the Figma file had to work as a hand-off, not a gallery. It's organised as a pipeline: research and the moodboard, then designs for review, then a page per flow marked ready for dev, with everything that was cut kept in its own descoped page rather than deleted. Each dev-ready flow shows its states side by side, logged in and logged out, empty and full, so nobody had to guess.

The app is built on Swift's design library, so most screens were assembled from parts engineering already had, and a change to a component reached every flow at once.

Where it landed

Swift Booking shipped to players and parents across Swift's facilities. PLACEHOLDER — anything you can share about adoption, bookings or reviews.