Minimalist 1v1 competitive coding dashboard built with React, Tailwind, and Firebase.
- Install dependencies:
npm install
- Create a
.envfile in the project root and add:
VITE_FIREBASE_API_KEY=your_api_key
VITE_FIREBASE_AUTH_DOMAIN=your_project.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_APP_ID=your_app_id
VITE_ALLOWED_UIDS=first_uid,second_uid
VITE_CHALLENGE_EDITOR_UIDS=first_uid- Start the app:
npm run dev
- Sign-in uses Firebase Auth (Google popup).
- Dashboard access is restricted to UIDs listed in
VITE_ALLOWED_UIDS. - Signed-in but unauthorized users see a restricted-access card and can sign out.
Use these collections and fields:
users/{uid}:uid: stringname: stringavatar: stringstreak: numberlastCompletedDate: string(optional,YYYY-MM-DD)
challenges/{YYYY-MM-DD}:date: string(same as document ID)title: stringproblemLink: stringplayerAId: stringplayerBId: string
results/{challengeId_userId}:challengeId: stringuserId: stringruntime: numbermemory: numbercompletedAt: string
progress/{challengeId_userId}:challengeId: stringuserId: stringcompletedAt: string
The repo includes server-side Firestore rules in firestore.rules that enforce:
- only participant users can access data
- a player can always read their own result
- opponent result is readable only after both players submitted
Deploy with Firebase CLI:
firebase deploy --only firestore:rules
- Open the
Challenge Admincard. - Set a start date in
Blind 75 Scheduler. - Click
Schedule Blind 75 (Next 75 Days).
This bulk-writes one challenge per day into challenges/{YYYY-MM-DD} using a curated 75-problem list.