OpenTrailPaper
Open-source bike computer firmware for the LilyGO T5S3 4.7" E-Paper PRO, with offline maps, GPX routes, FIT recording and Bluetooth sensors.
Drafts, lunch-period scheduling, live courtside stats, standings, trades, and playoffs for school intramural leagues.
Sports & fitnessGitHub @togethersportsOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
Repository information has not been collected yet.
No updates detected yet. GitHub releases will appear here.
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗A web app for running school intramural sports leagues: captains draft teams, games are scheduled into lunch and free periods, stats are tracked live from the sideline, and playoffs settle it. Basketball first; the data model supports other sports.
The full product brief lives in docs/BRIEF.md. The brand
is docs/BRANDBOOK.html (v1.0) and
docs/DESIGN.md maps it onto the code.
The full league loop works end to end:
client_uuid), automatic plus/minus from lineups, box scores,
play-by-play, leaderboards, player/team pagesDeferred (schema often already in place): auction drafts, availability date-overrides UI, web-push delivery (subscriptions table exists; in-app inbox works), reactions UI, weekly awards UI, multi-team trades, game-reminder cron, public no-login league pages.
npm test — unit tests for the pure logic: stats/plus-minus engine,
scheduler, standings tiebreakers, bracketsnpm run test:db — applies every migration to an in-memory Postgres
(PGlite) and replays a full season scenario: signup → league → draft
(queues, auto-pick, undo) → availability → live game events (idempotency)
→ finalize → trade flow. It then drops to the authenticated role, the
way Supabase serves a signed-in request, and asserts that RLS actually
enforces access — non-members blocked, no self-promotion to
commissioner, game events writable only by the assigned scorekeeper and
only while the game is live.npm installsupabase/migrations/ against it (SQL editor or
supabase db push with the CLI).cp .env.example .env.local and fill in the URL and anon key.npm run devWithout env vars the app still runs: public pages render and authenticated
routes redirect to /setup, which explains what to configure.
app/ routes (App Router)
(auth)/ login, signup + server actions
(app)/ authenticated shell: dashboard, inbox, join, leagues/new
league/[slug]/ overview, schedule, standings, stats, teams, availability,
draft (live room), trades, playoffs, members, console,
game/[id] (+ /track), player/[id], team/[id], actions.ts
design/ living styleguide
components/ ui primitives, icons, shell, game card, standings table
lib/ supabase clients, data layer, and PURE tested logic:
stats.ts, scheduler.ts, standings.ts, bracket.ts
supabase/migrations/ SQL: full data model, RLS on every table, RPCs
scripts/db-test.mjs PGlite end-to-end migration + scenario test
docs/ BRIEF.md (product spec), DESIGN.md (design language)
proxy.ts Supabase session refresh (Next 16 proxy convention)