Fitova — Fitness PWA
Premium fitness app template built with Next.js 16, TypeScript, Tailwind CSS v4, and Framer Motion. Pixel-perfect dark UI with lime-green accents — production-ready architecture, zero backend required.
Next.js 16 React 19 TypeScript 5 Tailwind v4 Framer Motion 12 PWA Ready <!✅ Core Features
⚡ Next.js 16 App RouterFile-based routing, server components, layouts, and streaming — no pages directory.
PWA ReadyInstallable on iOS & Android with manifest, service worker, and offline fallback page.
Tailwind CSS v4Latest Tailwind with CSS-first config, custom design tokens, and dark theme throughout.
️ Context + localStorageAuth, user profile, language, and favorites persisted via React Context + localStorage. No Redux needed.
TypeScriptFully typed codebase with interfaces for all data models, props, and context values.
✅ Form ValidationReact Hook Form + Zod schema validation on all auth, onboarding, and profile forms.
Charts & StatisticsChart.js 4 + react-chartjs-2 for workout statistics, heart rate sparklines, and progress rings.
Toast NotificationsSonner for success, error, and info feedback. Custom dark theme matching the app palette.
Auth MiddlewareNext.js middleware guards all protected routes using a cookie token. Auth routes redirect when logged in.
️ Framer MotionPage transitions, staggered list animations, and micro-interactions throughout.
Date Utilitiesdate-fns 4 for workout scheduling, DOB formatting, and relative time display.
Developer FriendlyWell-commented code, clean folder structure, ESLint, Prettier, and path aliases configured.
<!Tech Stack
| Package | Version | Purpose |
|---|---|---|
next |
16.1.6 | App framework — App Router, middleware, SSR |
react / react-dom |
19.2.3 | UI library |
typescript |
5 | Type safety throughout |
tailwindcss |
4 | Utility-first CSS — CSS-first config, no tailwind.config.js |
framer-motion |
12 | Page transitions and animations |
chart.js + react-chartjs-2 |
4 | Statistics charts and sparklines |
react-hook-form |
7 | Form state management |
@hookform/resolvers |
— | Zod schema resolver for forms |
zod |
4 | Schema validation |
sonner |
2 | Toast notifications |
date-fns |
4 | Date formatting and utilities |
lucide-react |
latest | Icon library |
35+ App Screens
Splash & Onboarding
- Splash Screen
- Onboarding Slides (1–3)
Authentication
- Sign In
- Sign Up
- Forgot Password
- Reset Password
- New Password
- Reset Success
Setup Flow
- Gender Selection
- Date of Birth
- Weight
- Sport Preferences
- Plan Selection
Core App
- Home Dashboard
- Notifications
- Favorites
- Scan Food
Workouts
- Workout List
- Workout Detail
- Trainer Profile
- Today’s Best
Statistics
- Statistics Dashboard
- Heart Rate Chart
- Progress Rings
- Weekly Summary
User Profile
- Profile / Settings
- Edit Profile
- Language Picker
- Log Out
Utility
- Payment / Upgrade
- 404 Error Page
- Offline Fallback
- PWA Install Banner
️ Storage — localStorage & Cookies
No backend required
All state is stored client-side. Auth uses a cookie for middleware
route protection; everything else uses localStorage. All keys are
centralised in src/lib/utils/constants.ts under
STORAGE_KEYS, SESSION_KEYS, and
COOKIE_KEYS.
localStorage Keys
fitova_user_profile Name, email, avatar, DOB, weight, gender, sports, goal fitova_auth_token Auth token (mirrors cookie) fitova_favorites Array of saved workout IDs fitova_language Selected UI language codeCookie Keys & Session
fitzen-token Auth cookie read by middleware to protect routes fitova_pwa_dismissed sessionStorage — hides PWA install banner for session fitova_setup_* sessionStorage — guards each onboarding step (gender, dob, weight, sports) <!Getting Started
Install dependenciesnpm installRun development server
npm run devBuild for production
npm run build && npm startNode.js requirement
Requires Node.js 18.18 or later. Tested on Node 20 LTS.
<!Get Fitova — Next.js today
Launch your fitness app with a solid foundation — built on the most powerful React framework.