Easily track your workout activities throughout the week
A modern, progressive web application for managing workout plans, tracking activities, and monitoring your fitness progress. Built with Nuxt 4, Vue 3, and Supabase.
π Live Demo β’ π Documentation β’ π€ Contributing
- ποΈ Activity Management: Create, edit, and organize workout activities
- π Weekly Planning: Plan your workouts throughout the week with an intuitive calendar
- β±οΈ Timer System: Built-in timer for tracking exercise duration
- π Progress Tracking: Monitor your fitness journey with activity history
- π₯ Trainer Mode: Share workout plans with clients (trainer feature)
- π¨ Modern UI: Clean, minimalist design with gradients and glassmorphism
- π Dark Mode: (Coming soon)
- π± Responsive: Optimized for mobile, tablet, and desktop
- β‘ Progressive Web App: Install and use offline
- π Toast Notifications: Real-time feedback for user actions
- π Skeleton Loaders: Smooth loading states
- ποΈ 4-Layer Architecture: Clean separation of concerns (UI β Pages β Stores β Repositories)
- π Authentication: Secure user authentication via Supabase
- πΎ Offline Support: PWA with service worker caching
- π Type Safety: Full TypeScript coverage
- π§ͺ Testing: Unit tests (Vitest) and E2E tests (Playwright)
- Node.js: v18.x or higher
- Package Manager: yarn, npm, or pnpm
- Supabase Account: For backend services (or use local development)
-
Clone the repository
git clone git@github.com:simone98dm/lazy-trainer-fe.git cd lazy-trainer-fe -
Install dependencies
yarn install # or npm install # or pnpm install
-
Set up environment variables
Create a
.envfile in the root directory:SUPABASE_URL=your_supabase_url SUPABASE_ANON_KEY=your_supabase_anon_key SUPABASE_SERVICE_ROLE_KEY=your_service_role_key BASE_URL=http://localhost:3000
-
Start the development server
yarn dev # or npm run devOpen http://localhost:3000 in your browser.
This project follows a 4-Layer Architecture for clean separation of concerns:
βββββββββββββββββββββββββββββββββββββββββββββββ
β Layer 1: Components (UI Only) β
β - Display data β
β - Handle user interactions β
β - Emit events β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββββββββββββ
β Layer 2: Pages (Orchestration) β
β - Call store methods β
β - Show/hide UI elements β
β - Minimal logic β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββββββββββββ
β Layer 3: Stores (Business Logic) β
β - State management β
β - Data validation β
β - Error handling β
β - Call repositories β
βββββββββββββββββββ¬ββββββββββββββββββββββββββββ
β
βββββββββββββββββββΌββββββββββββββββββββββββββββ
β Layer 4: Repositories (Data Access) β
β - Supabase queries β
β - DTO mapping β
β - API calls β
βββββββββββββββββββββββββββββββββββββββββββββββ
- Colors: Custom green/purple palette with 50-950 shades
- Typography: Lato font family
- Shadows: Soft, glow, and inner shadows
- Animations: Fade, slide, scale, and bounce transitions
- Border Radius: 2xl, 3xl, 4xl, 5xl for modern rounded corners
- Atoms: BaseButton, Input, Card, Switch, Loading, MaterialIcon
- Molecules: BaseModal, PageHeader, EmptyState, Toast, TimePicker
- Organisms: ActivityForm, ActivityList, CustomCalendar, ToastContainer
π View component demos at /components-demo
# Run unit tests
yarn test:unit
# Run with coverage
yarn test:coverage
# Watch mode
yarn test:unit --watch# Run E2E tests
yarn test:e2e
# Run in UI mode
yarn test:e2e --ui
# Run specific browser
yarn test:e2e --project=chromium# Build the application
yarn build
# Preview production build locally
yarn preview# Deploy to Vercel
yarn vercel:deploy- Netlify: Connect your repo and deploy automatically
- CloudFlare Pages: Zero-config deployment
- Node.js Server: Run
.output/server/index.mjs
π See Nuxt deployment docs for more options
| Script | Description |
|---|---|
yarn dev |
Start development server |
yarn build |
Build for production |
yarn preview |
Preview production build |
yarn lint |
Lint and format code |
yarn test:unit |
Run unit tests |
yarn test:coverage |
Run tests with coverage |
yarn test:e2e |
Run E2E tests |
yarn vercel:deploy |
Deploy to Vercel |
| Variable | Description | Required |
|---|---|---|
SUPABASE_URL |
Your Supabase project URL | β |
SUPABASE_ANON_KEY |
Supabase anonymous key | β |
SUPABASE_SERVICE_ROLE_KEY |
Supabase service role key | β |
BASE_URL |
Application base URL | β |
Custom configuration in tailwind.config.cts:
- Extended color palette (primary/secondary)
- Custom shadows and animations
- Responsive breakpoints
- Custom spacing values
Progressive Web App settings in nuxt.config.ts:
- Offline support
- Service worker caching
- App manifest
- Icons and splash screens
- CLAUDE.md: Architecture guidelines and coding standards
- CONTRIBUTING.md: How to contribute to the project
- UI_UX_MODERNIZATION.md: UI/UX design system documentation
- NUXT4_RESTRUCTURE_COMPLETE.md: Nuxt 4 migration guide
We welcome contributions! Please see our Contributing Guide for details on:
- Code of conduct
- Development workflow
- Coding standards
- Pull request process
This project is licensed under the MIT License - see the LICENSE file for details.
Simone Dal Mas (@simone98dm)
- π Website: workout.simone98dm.dev
- π§ Email: simone.dalmas@outlook.it
- Nuxt - The Intuitive Vue Framework
- Supabase - Open Source Firebase Alternative
- Tailwind CSS - Utility-first CSS Framework
- Pinia - The Vue Store that you will enjoy using
- Material Icons - Icon library
Made with β€οΈ by the Lazy Trainer Team
β Star us on GitHub β’ π Report Bug β’ π‘ Request Feature