Swim team ops. Meet day timing. Live results.
Free forever — no ads, no paywalls, built for small-town teams.
Small-town and summer-league teams deserve the same polish big clubs pay for — without stacking subscriptions.
Today that usually means a frankenstein setup:
| Need | Typical paid / limited tools |
|---|---|
| Rosters, chat, schedules | TeamSnap |
| Phone timing & scoring | Swimmingly |
| Live heat sheets & results | SwimminglyFan |
Towns either cut features, pay for multiple apps, or both. OpenSwim’s bet is one open stack that covers the whole meet weekend — from signing up swimmers to printing ribbon labels — and stays free and ad-free.
OpenSwim is the clubhouse, the deck, and the parent’s pocket:
| Who | What they get |
|---|---|
| Coaches & managers | Orgs, seasons, rosters, meet entries, scoring, team chat |
| Timers & scorekeepers | Native phone/iPad timing huddle — starter pulse, lane stops, verify & publish |
| Parents & fans | Live heat sheets, results, rankings, race-aware updates |
- Seed a dual meet and share the heat sheet
- Volunteers join the huddle (QR) as starter / timer / scorekeeper
- Times sync live → scorekeeper verifies → parents see results
- Export ribbon labels for the award table
Native SwiftUI and Kotlin Compose apps handle timing on purpose: clock sync and deck reliability beat cross-platform compromises.
- Track swimmers across seasons and years
- Rankings and team scores during the meet
- Manager ↔ parent chat (schedules & volunteers later)
- League / multi-team formats and Hy-Tek-style interop on the roadmap
Full story: roadmap · backlog · competitor map
| Layer | Choice |
|---|---|
| API | Go + Postgres + WebSockets |
| Web | Next.js (App Router) · TypeScript |
| iOS / iPad | Native SwiftUI |
| Android | Native Kotlin Compose |
| Contracts | OpenAPI in packages/contracts |
Phase 0 — foundations. Docs, monorepo layout, agent metadata, and the Go API skeleton (apps/api) are in place. Open the Dev Container for local API work (Docker on the host only). Web/iOS/Android runtimes are still scaffold-only.
| I want to… | Go here |
|---|---|
| Set up my machine | Onboarding guide (Dev Containers) |
| Send a change | Contributing |
| See what’s planned | Roadmap · Tasks |
| Learn the domain | Domain model |
| Read architecture decisions | ADRs |
| Report a vulnerability | Security |
Community: Contributors · Code of Conduct · MIT License
apps/api Go API (skeleton: /health)
apps/web Next.js web (scaffold)
apps/ios SwiftUI (scaffold)
apps/android Compose (scaffold)
brand/ marks, icons, lockups, social preview
packages/ contracts, tokens
docs/ roadmap, onboarding, agents, ADRs
.devcontainer/ Dev Container (Go + Postgres)
skills/ portable Agent Skills
.github/ CODEOWNERS, PR template (see ABOUT.md)
Start at AGENTS.md. Details in docs/agents/. Skills in skills/. Harness adapters (CLAUDE.md, .cursor/rules/, …) are pointers only — don’t fork the rules.
Built for the pool deck — not the paywall.
