Track your gym personal records (PRs). Built with React, Firebase Authentication, and Cloud Firestore.
Default language: Hebrew (עברית), with English available in Settings.
- Google sign-in (Firebase Auth)
- Add, edit, and delete PRs (exercise, weight, reps, date, notes)
- Pick a workout from the add flow (shows estimated 1RM per lift when logged)
- Preset CrossFit exercises plus custom exercise names
- Real-time sync via Firestore with server-side validation rules
- Mobile-first gym-style UI (dark theme, orange accents)
- Hebrew default with RTL; language and account in the header settings menu
git clone https://github.com/RonStrauss/MyPR.git
cd MyPR
npm install-
Create a project at Firebase Console.
-
Add a Web app and copy the config values.
-
Enable Authentication → Google sign-in only (disable Email/Password if it was enabled).
-
Create a Firestore database (production mode is fine once rules are deployed).
-
Install the Firebase CLI and log in:
npm install -g firebase-tools firebase login
-
Deploy security rules from
firestore.rules(readsVITE_FIREBASE_PROJECT_IDfrom.env):npm run firebase:deploy-rules
Or paste the rules manually in Firestore → Rules.
Copy .env.example to .env and fill in your Firebase web app config:
VITE_FIREBASE_API_KEY=...
VITE_FIREBASE_AUTH_DOMAIN=...
VITE_FIREBASE_PROJECT_ID=...
VITE_FIREBASE_STORAGE_BUCKET=...
VITE_FIREBASE_MESSAGING_SENDER_ID=...
VITE_FIREBASE_APP_ID=...npm run devOpen the URL shown in the terminal (usually http://localhost:5173).
npm testCI runs on every push and pull request to main / master (see .github/workflows/ci.yml). Enable branch protection on GitHub so merges require the CI check to pass.
npm run buildDeploy the dist/ folder to Firebase Hosting, Vercel, Netlify, or any static host.
users/{userId}/prs/{prId}
- exercise: string
- weightKg: number
- reps: number
- date: string (YYYY-MM-DD)
- notes?: string
- createdAt: timestamp
- Vite + React 19 + TypeScript
- Firebase Auth & Firestore
- react-i18next (he / en)
- React Router
- Lucide icons
MIT