Vite + React + TypeScript app with Firebase Auth/Firestore/Functions/Hosting.
npm install
npm --prefix functions install
cp .env.example .env
npm run devnpm run lint
npm run typecheck
npm run build
npm run functions:build/login: Google sign-in/groups: create group, request to join by invite code, switch active group/: dashboard (requires auth + approved group membership)/picks: group-scoped picks/leaderboard: group-scoped leaderboard/admin: group admin/owner tools (invite link, approve requests, promote admins)
- In-app guide route:
/how-to-use - The guide documents all implemented gameplay/admin features and excludes private mini-leagues.
- Group creator becomes
ownerautomatically. - Join requests are created as
pendingand require approval byowneroradmin. - Only approved (
active) members can access picks/leaderboard for a group. - Group owner can promote or demote members to/from group admin.
- Groups:
groups/{groupId} - Memberships:
groups/{groupId}/members/{uid} - Active group pointer:
users/{uid}.activeGroupId - Picks:
picks/{seasonId}_{raceId}_{groupId}_{uid} - Scores:
scores/{seasonId}_{groupId}_{uid} - Leaderboards:
leaderboards/{seasonId}_{groupId}
firebase deploy --only functions,firestore:rules,hostingThis repo includes .github/workflows/deploy-main.yml to auto-deploy on pushes to main.
Required repository secret:
FIREBASE_SERVICE_ACCOUNT_F1TOTAL_C37F3: JSON key for a service account that can deploy Firebase Hosting, Functions, and Firestore rules for projectf1total-c37f3.
Required repository settings (Secrets or Variables):
FIREBASE_PROJECT_IDVITE_FIREBASE_API_KEYVITE_FIREBASE_AUTH_DOMAINVITE_FIREBASE_PROJECT_IDVITE_FIREBASE_STORAGE_BUCKETVITE_FIREBASE_MESSAGING_SENDER_IDVITE_FIREBASE_APP_IDVITE_FIREBASE_MEASUREMENT_ID
This project is licensed under Apache-2.0. See LICENSE.
See CONTRIBUTING.md for contribution flow and ownership/attribution terms.
See SECURITY.md for vulnerability reporting and secret-handling policy.