A minimalist workout tracking application built with Next.js. Log workouts, track volume, and visualize progress over time.
🔗 Live Demo: move-mentor-topaz.vercel.app
- Workout Logging - Create workouts with exercises, sets, reps, and weight
- Strength & Cardio Tracking - Support for resistance training and cardio sessions
- Interactive Dashboard - View total volume, cardio minutes, and workout frequency over customizable time periods
- Workout History - Browse all workouts in a filterable table with aggregated stats
- GitHub OAuth - Secure authentication with no password management
Frontend
- Next.js 16 (App Router)
- React 19
- TypeScript
- shadcn/ui (Radix + Tailwind CSS)
- Recharts
Backend
- Next.js Server Actions
- Prisma ORM
- PostgreSQL (Neon)
- NextAuth.js
Deployment
- Vercel (hosting)
- Neon (database)
- Node.js 18+
- PostgreSQL database (local or Neon)
- GitHub OAuth app
- Clone the repository
git clone https://github.com/Travisaurus-Rex/move-mentor.git
cd move-mentor- Install dependencies
npm install- Set up environment variables
Create a .env file:
# Database
DATABASE_URL="postgresql://user:password@localhost:5432/movementor"
# NextAuth
NEXTAUTH_SECRET="your-secret-here" # Generate with: openssl rand -base64 32
NEXTAUTH_URL="http://localhost:3000"
# GitHub OAuth (create at github.com/settings/developers)
GITHUB_CLIENT_ID="your-client-id"
GITHUB_CLIENT_SECRET="your-client-secret"- Set up the database
npx prisma migrate dev
npx prisma db seed # Optional: seed exercise library- Run the development server
npm run devUser ────────< Workout
│
└─────< WorkoutExercise >─────┐
│ │
└──────< Set Exercise
- User - GitHub OAuth account
- Workout - Training session with date and notes
- Exercise - Global library (Bench Press, Running, etc.)
- WorkoutExercise - Join table linking workouts to exercises
- Set - Individual performance record (reps × weight or duration)
enum ExerciseCategory {
STRENGTH // reps, weight, RPE
CARDIO // duration, distance
BODYWEIGHT // (schema only - not implemented)
MOBILITY // (schema only - not implemented)
}src/
├── app/
│ ├── about/ # Landing page
│ ├── api/
│ │ ├── auth/ # NextAuth routes
│ │ └── dashboard/ # Dashboard stats API
│ ├── dashboard/ # User dashboard
│ ├── workouts/
│ │ ├── [id]/ # Workout detail + editing
│ │ ├── new/ # Workout creation
│ │ └── actions.ts # Server actions (CRUD)
│ └── components/ # Shared UI components
├── lib/
│ ├── auth/ # Auth helpers
│ ├── queries/ # Prisma queries
│ └── types/ # TypeScript types
└── components/ui/ # shadcn components
-
Create a Neon database
- Sign up at neon.tech
- Copy the connection string
-
Deploy to Vercel
- Import your GitHub repo at vercel.com
- Add environment variables in project settings
- Deploy
-
Run migrations
DATABASE_URL="your-neon-url" npx prisma migrate deploy- Update GitHub OAuth app
- Add Vercel callback URL:
https://your-app.vercel.app/api/auth/callback/github
- Add Vercel callback URL:
npm run dev # Start development server
npm run build # Build for production
npm run start # Start production server
npx prisma studio # Open database GUI
npx prisma migrate dev --name <name> # Create and apply migration- No workout templates or copy functionality
- No personal records (max weight) tracking
- No body weight logging
- Exercise dropdown has no search (becomes unwieldy with 50+ exercises)
- No mobile optimization for workout table
- BODYWEIGHT and MOBILITY categories exist in schema but have no UI support
- Personal records tracking with charts
- Workout templates and copy functionality
- Body weight logging and progress tracking
- Exercise search and filtering
- Mobile-responsive workout table
- File uploads (progress photos)
- Weekly email summaries (AWS Lambda + SES)
This is a personal portfolio project, but feedback and suggestions are welcome. Open an issue or submit a pull request.
MIT
Travis Adams
GitHub • LinkedIn