BikeControl (SwiftControl)
Use Zwift Click, Zwift Play, Shimano Di2, or any Bluetooth controller with MyWhoosh, Rouvy, Zwift, and more. Free to try on iOS, Android, Windows, and macOS.
Know where everyone needs to be. For parents, players, coaches and leagues: fixtures from the league, who’s playing, team chat and your whole family’s week in one calendar.
Sports & fitnessTypeScript · PythonGitHub @OperatorModeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Loading the full README. The saved excerpt is shown below.
The team app for junior football, live at sidelnr.app. Teams live at sidelnr.app/.
Team app for the TPP 6 A-Side League 2026: next game and meeting time, attendance (with goalie sign-up), 3-2-1 MVP voting and the live ladder. One mobile-first Next.js app hosts every team, each at its own link (e.g. /storm-united). Hosted on Vercel, data in Supabase.Read the full README ↗The team app for junior football, live at sidelnr.app. Teams live at sidelnr.app/<team>.
Team app for the TPP 6 A-Side League 2026: next game and meeting time, attendance (with goalie sign-up), 3-2-1 MVP voting and the live ladder. One mobile-first Next.js app hosts every team, each at its own link (e.g. /storm-united). Hosted on Vercel, data in Supabase.
tpp-6aside.netlify.app/data.js, results from the league's public Firebase feed. A team only needs its name and division as they appear in the TPP draw./<team>/admin: the team's admin PIN (or the super admin PIN): season MVP tally, goalie tally and assignment, votes per game, backup scores, and team settings (players, join code, meeting time, goalie sign-up)./super: the super admin PIN (ADMIN_PIN env var): add/edit/delete teams, pick the team from the TPP draw, set colours, upload a logo (or use the generated crest), players, team admin PIN and join code.supabase/schema.sql, then supabase/migrations/001_multi_team.sql and 002_multi_team_keys.sql and 003_messaging.sql in order..env.example: SUPABASE_URL, SUPABASE_SERVICE_ROLE_KEY, ADMIN_PIN, and VAPID_PUBLIC_KEY / VAPID_PRIVATE_KEY / VAPID_SUBJECT for notifications.npm install
npm run dev
Without Supabase env vars, local dev stores data in .data/local-db.json (seeded with Storm United) and uploaded logos in public/uploads/. Set DEMO_NOW (ISO timestamp, e.g. 2026-10-13T08:00:00+08:00) to time-travel for testing; it's ignored in production.
Player names are first name + last initial only.