PROJECT DIRECTORY STRUCTURE

This document explains the internal folder structure of the project and what each folder is used for. The goal is to keep things organized, easy to understand, and simple to maintain.

--------------------------------------------------

ROOT DIRECTORY

.vscode/
Contains editor-specific settings for VS Code, such as recommended extensions and formatting rules. This helps keep the development experience consistent across the team.

src/
Main source folder for the application. Almost all app logic, UI, and assets live here.

.gitignore
Specifies which files and folders Git should ignore (for example, node_modules or local config files).

README.md
High-level project documentation (overview, setup instructions, etc.).

app.json
App configuration file used by Expo / React Native for app metadata and settings.

babel.config.js
Configuration for Babel, which is used to compile modern JavaScript.

eslint.config.js
ESLint configuration to enforce consistent code style and catch common issues.

jsconfig.json
Helps with path aliases and editor tooling support.

package.json
Lists project dependencies, scripts, and general project info.

package-lock.json
Locks dependency versions to ensure consistent installs across environments.

--------------------------------------------------

SRC FOLDER

This folder contains the core of the application.

src/app/
Handles app routing and screen organization using file-based routing.

(auth)/
Screens related to authentication, such as login and signup.

(onboarding)/
Screens used during the onboarding flow when a user first sets up their profile.

(tabs)/
Main tab-based navigation screens of the app.

_layout.jsx
Defines the main layout and navigation structure for the app.

--------------------------------------------------

src/assets/
Stores static assets used throughout the app.

fonts/
Custom fonts used for styling text.

images/
Image assets such as logos and icons.

--------------------------------------------------

src/components/
Reusable UI components used across multiple screens. These are building blocks like cards, buttons, modals, and inputs.

This folder includes:
- Exercise-related cards and pickers
- Workout and split modals
- Themed UI components (buttons, text, inputs, loaders, etc.)

Keeping these components here helps avoid code duplication and keeps screens clean.

--------------------------------------------------

src/constants/
Holds shared constants used across the app.

theme.js
Defines colors, spacing, fonts, and other theme-related values.

--------------------------------------------------

src/contexts/
React Contexts used for global state management.

AuthContext.jsx
Manages authentication state and user session data.

OnboardingContext.jsx
Manages onboarding progress and related user data.

--------------------------------------------------

src/hooks/
Custom React hooks that encapsulate reusable logic.

useActiveWorkout.jsx
Handles logic related to an active workout session.

--------------------------------------------------

src/lib/
Low-level utility and configuration files.

appwrite.js
Sets up and exports the Appwrite client used for backend services.

--------------------------------------------------

src/services/
Handles data operations and communication with the backend. Each file is usually focused on one feature or resource.

exercises.js
Exercise-related data and logic.

profile.js
User profile operations.

splits.js
Workout split logic.

templates.js
Workout templates.

workouts.js
Workout sessions and history.

--------------------------------------------------

This structure is designed to keep the codebase clean, modular, and easy to scale as the app grows.
