Judy is a mobile-first workout execution app built with React Native and Expo. It allows athletes to plan, execute, and log workouts with minimal friction — designed around a single Today view that puts the active workout front and centre.
Follow every step below in order. These instructions assume a fresh Linux install with nothing pre-installed.
sudo apt update && sudo apt install -y gitVerify:
git --versionnvm (Node Version Manager) is the recommended way to install Node on Linux without needing sudo for npm globals.
# Download and run the nvm installer
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash
# Reload your shell so the `nvm` command is available
source ~/.bashrcIf you use zsh, replace
~/.bashrcwith~/.zshrc.
Install Node.js 18 (LTS) and set it as the default:
nvm install 18
nvm use 18
nvm alias default 18Verify:
node --version # should print v18.x.x
npm --versiongit clone https://github.com/pcdev333/judy-ui.git
cd judy-uinpm installThis installs all packages listed in package.json, including Expo, React Native, NativeWind, Supabase, and Zustand.
- Go to https://supabase.com and sign up / log in.
- Click New project, give it a name (e.g.
judy), choose a region, and set a database password. - Once the project is ready, navigate to Project Settings → API.
- Copy the Project URL and the anon / public key — you will need them in the next step.
cp .env.example .envOpen .env in any text editor and fill in the values from your Supabase project:
EXPO_PUBLIC_SUPABASE_URL=https://your-project-ref.supabase.co
EXPO_PUBLIC_SUPABASE_ANON_KEY=your-anon-key
.envis listed in.gitignoreand will never be committed.
Install the Expo Go app on your phone:
- Android: Google Play Store
- iOS: Apple App Store
Start the development server:
npx expo startA QR code will appear in the terminal. Open the Expo Go app and scan it. Your phone and development machine must be on the same Wi-Fi network.
If you prefer an emulator instead of a physical device:
-
Install Android Studio:
sudo snap install android-studio --classic
-
Open Android Studio → More Actions → Virtual Device Manager → Create Device.
-
Choose a device (e.g. Pixel 7), select a system image (API 34 / Android 14), and click Finish.
-
Start the emulator from Virtual Device Manager, then run:
npx expo start --android
Expo will automatically detect the running emulator and open the app.
| Key | Action |
|---|---|
r |
Reload the app |
m |
Toggle the dev menu |
j |
Open the JavaScript debugger |
a |
Open on connected Android device/emulator |
Ctrl + C |
Stop the server |
judy-ui/
├── app/
│ ├── (auth)/
│ │ └── index.tsx # Auth screen — email input + magic link
│ ├── (app)/
│ │ ├── index.tsx # Today screen (home after login)
│ │ ├── workout/
│ │ │ └── [id].tsx # Workout Execution screen
│ │ ├── planner.tsx # Planner screen
│ │ ├── library.tsx # Workout Library screen
│ │ └── create.tsx # Create Workout screen
│ └── _layout.tsx # Root layout + auth guard
├── components/
│ └── ui/
│ └── Button.tsx # Reusable button component
├── lib/
│ └── supabase.ts # Supabase client
├── store/
│ └── useWorkoutStore.ts # Zustand store
├── types/
│ └── index.ts # Shared TypeScript types
├── .env.example
├── app.json
├── tailwind.config.js
└── tsconfig.json
| Phase | Description |
|---|---|
| Phase 1 | Project scaffold, Auth screen, Today screen shell |
| Phase 2 | AI workout creation (natural language → structured JSON) |
| Phase 3 | Workout Library — browse, search, create workouts |
| Phase 4 | Planner — schedule workouts by date |
| Phase 5 | Workout Execution — live set logging |
| Phase 6 | Progress tracking, history, and analytics |