Simple & for fun React.js, TypeScript, and Redux application for tracking and managing a user's fitness journey. This frontend application deploys automatically on merges to master via Netlify: https://gymtrack.netlify.app
The backend was made in Node.js (Express.js) but has been deprecated for a Spring Boot version here: https://github.com/giavinh79/GymTrackApiV2
- Install dependencies
$ npm install
- Run the application
$ npm start
Run npm run build
and use the newly created 'build' folder for deployment.
Install:
- Prettier
- ESLint
- Enable "format on save"
Routine: Series of workouts you do on a weekly basis (i.e. push-pull-legs)
Workout: A set of exercises for a particular day (i.e. Leg day with squats, leg press, and leg curls)
Exercise: An individual type of exercise (i.e. bench-press, chin-ups, push-ups, bicep curl... etc.)
Set: A series of repetitions performed sequentially (i.e. when doing push-ups, a set could represent 50 reps which means you did 50 pushups in one go)
- React.js (w/ TypeScript)
- Redux Toolkit for global state management
- RTK Query for data fetching (request de-duplication, caching, optimistic updates...etc.)
- React Router for routing
- Mantine for design & styling (UI component library with useful hooks)
- Font Awesome 5 for icons
- Internationalization with react-i18next and https://translate.i18next.com/
- Production error tracking with Sentry
- Uses Vite as a build tool over Webpack for significant development performance increases
- Mixpanel for analytics
- Complete routine start and update features
- Internationalize all text
- Add component tests w/ React Testing Library
- Address all @TODOs in code
- Re-consider a global modal approach with functions instead (and tradeoffs associated with this) - maybe just use Mantine's Modal Provider
- Lazy load Sentry
- Migrate to dnd-kit ?
- Increase performance on load (reduce initial bundle size load with code splitting w/ Vite.js dynamic imports, Partytown, replacing Font Awesome at some point...etc.
- Storybook v7
- Get rid of Lodash and replace with native functions or create util functions
- TS lint on CI/CD