Developer portfolio
SquadSync project icon

Make the plan, get everyone there, run it back

SquadSync

Squad Planner In Development

A coordination system for gaming friend groups, spanning squads, sessions, expiring invites, ready checks, chat, presence, reminders, recaps, and a one-tap rematch path.

Clients
SwiftUI app, widget, Live Activity, Watch, App Clip, and Messages
API
Python 3.11 and FastAPI
Data
PostgreSQL with Alembic migrations and Redis-backed realtime state
Hosting
Containerized backend on Google Cloud Run

What it does

SquadSync replaces the fragile group-chat plan with a structured session that knows who is invited, who is ready, when people are running late, and whether the group wants to play again. Invite codes expire, archived squads revoke outstanding access, and Run It Back turns a finished session into a new one without rebuilding the roster by hand.

The product reaches beyond the main iPhone app. Widgets and Live Activities expose the next session, the Watch can show the plan and send a running-late update, an App Clip previews an invite, and the Messages extension shares squads and sessions. All of those clients converge on the same versioned FastAPI contract.

Product principles

01

A session, not a chat promise

Time, roster, readiness, attendance, lateness, chat, and outcome live on one durable object.

02

Invites with a lifecycle

Codes can expire, cap their use, be revoked, and disappear when the squad is archived.

03

Realtime where it matters

WebSockets, presence, typing state, voice rooms, push, widgets, and Live Activities keep the plan current.

04

Run It Back

Completed sessions can become a rematch with the prior group and context already attached.

How the system moves

A family of Apple clients shares one API contract. FastAPI services enforce squad, invite, chat, and session lifecycles over PostgreSQL, while Redis and WebSockets handle short-lived presence and realtime coordination.

Invite to after-action recap

  1. 01 · Surfaces

    App, Watch, widget, Clip

    Each surface presents a focused slice of the same squad and session model.

  2. 02 · Client

    Swift models and services

    Typed requests, auth state, deep links, notifications, and shared extension data meet here.

  3. 03 · API

    FastAPI route contract

    Versioned endpoints coordinate users, squads, sessions, messages, voice, safety, and invites.

  4. 04 · Domain

    Lifecycle services

    Business rules enforce membership, readiness, expiry, rematches, reports, and account deletion.

  5. 05 · State

    PostgreSQL and Redis

    Durable records use migrated relational data; presence and realtime coordination use bounded fast state.

  6. 06 · Delivery

    WebSockets, APNs, Live Activity

    Updates return to the group on the screen and device surface that needs them.

Extensions do not invent parallel state. They read shared, scoped projections of the backend session model so a widget, Watch, and phone do not disagree about the plan.

More systems