A fitness & diet tracking mobile app built with React Native (Expo) and Supabase. Users track workouts, body weight, and diet/calories, with English/Turkish localization and light/dark theming throughout.
This is a personal/portfolio project. The screenshots below were captured against demo data; the live backend used during development is not included in this repo (see Backend below).
| Login | Register | Dashboard |
|---|---|---|
![]() |
![]() |
![]() |
| Training | Tracking | Diet |
|---|---|---|
![]() |
![]() |
| Profile | Diet — Water & Meals | Diet — Meal Slots |
|---|---|---|
![]() |
![]() |
![]() |
- Auth & onboarding — email/password sign-up and sign-in (Supabase Auth), guided profile setup (age, height, weight, goals)
- Dashboard — daily overview: today's workout, weekly progress, weight-goal progress
- Training — weekly workout program builder, exercise logging, custom exercises
- Tracking — weight and strength progress over time with charts (weekly/monthly/yearly views)
- Diet — meal planning, food/calorie logging, water intake tracking
- Notifications — local reminders for meals, water, and workouts
- Weather-aware suggestions — via OpenWeatherMap, with automatic fallback to demo data if no key/location is available
- Localization — English and Turkish, switchable in-app
- Light/dark theme
- AdMob integration for free-tier users, with a "Pro" paywall UI (see note below)
- Expo SDK 54 / React Native 0.81 / React 19
- Supabase — Postgres + Auth
- React Navigation (bottom tabs + native stack)
react-native-chart-kit+react-native-svgfor chartsexpo-notifications,expo-location,expo-image-picker- ESLint (
eslint-config-expo) for linting
├── src/
│ ├── screens/ # one file per app screen
│ ├── components/ # shared UI components
│ ├── context/ # Theme, User, Language, Subscription providers
│ ├── services/ # Supabase-backed data access + ads/notifications/weather
│ ├── locales/ # en.js / tr.js translation dictionaries
│ └── theme/ # colors, spacing
├── SQLs/realsqls/ # Postgres schema & migrations (run in numeric order)
├── .env.example # required environment variables (see below)
└── app.json / eas.json # Expo & EAS build configuration
cd MyFitly
npm install
cp .env.example .env # then fill in your own keys, see below
npx expo startCopy .env.example to .env and fill in:
EXPO_PUBLIC_SUPABASE_URL=
EXPO_PUBLIC_SUPABASE_ANON_KEY=
EXPO_PUBLIC_OPENWEATHER_API_KEY=
- Supabase: create a free project at supabase.com, then run the SQL files under
SQLs/realsqls/against it in numeric order to create the schema (users, workouts, diet, tracking, subscriptions, RLS policies). - OpenWeatherMap: a free key from openweathermap.org/api. Optional — the app falls back to demo weather data if this is missing.
Without a configured Supabase project, the app still starts, but auth/data screens will show connection errors — this is expected, not a bug.
This repo does not ship a live backend. The screenshots above were taken by temporarily injecting a fake session for UI capture; no live demo instance is currently hosted. To run the app end-to-end, point it at your own Supabase project as described above.
npm run lint # ESLint
npm run doctor # expo-doctor project health check
npm run export # bundle a production build (no native compile)
npm run web # run in a browser via react-native-webThis is a portfolio/learning project, not a production app. A few things worth knowing before judging it as one:
- The "Pro" subscription is a UI demo only. There is no real payment provider or receipt validation — activating "Pro" just flips a local flag. This is intentional and disclosed in-code (
src/context/SubscriptionContext.js). - No automated test suite yet.
- Web support (
npx expo start --web) works for previewing the UI, but AdMob ads are native-only and no-op on web.
No license file yet — all rights reserved by default. Open an issue if you'd like to use this code and I'll consider adding one.







