# Workout Tracker

A comprehensive web application designed to help users track their workouts, monitor progress over time, and manage fitness-related data.

## Setup

1.  **Install Python:** Ensure you have Python 3 installed (`python>3`).
2.  **Install Dependencies:**
    ```bash
    pip install -r requirements.txt
    ```
3.  **Enable Development Mode:**
    For PowerShell:
    ```powershell
    $ENV:FLASK_ENV='development'
    ```
    For bash/zsh:
    ```bash
    export FLASK_ENV='development'
    ```
4.  **Set Database URL:**
    Configure your database connection string. You can set up a local PostgreSQL database and use the migration scripts, or connect to an existing deployed database.
    For PowerShell:
    ```powershell
    $Env:DATABASE_URL = 'postgres://username:password@host:port/database_name'
    ```
    For bash/zsh:
    ```bash
    export DATABASE_URL='postgres://username:password@host:port/database_name'
    ```
5.  **Run Migrations (if applicable):**
    If you're setting up a new database, you might need to run database migrations. (Assuming Flask-Migrate or similar is used - check project for specific commands if any, e.g., `flask db upgrade`)
6.  **Start Application:**
    ```bash
    flask run
    ```
    The application should now be running, typically at `http://127.0.0.1:5000/`.

## Features

This application boasts a rich set of features to enhance your workout tracking experience:

- **User Authentication & Authorization:**
  - Secure user registration and login.
  - Password hashing for security.
  - Session management with logout functionality.
- **Workout Logging:**
  - Track exercises, sets, reps, and weights.
  - Record top sets for each workout to monitor personal bests.
  - Add notes to workouts.
  - Tag workouts for better organization and filtering.
- **Dashboard:**
  - At-a-glance overview of recent activity and progress.
- **Calendar View:**
  - Visualize workout history on a calendar.
- **Exercise Management:**
  - Add, view, and manage a list of exercises.
- **Progress Tracking & Statistics:**
  - View detailed statistics and graphs of your performance over time.
  - Track personal records and trends.
  - Graphs for individual users/people.
- **Workout Programs:**
  - Create, view, and manage structured workout programs.
- **Data Export:**
  - Export your workout data.
- **Notes:**
  - A dedicated section for general fitness-related notes.
- **SQL Explorer:**
  - An advanced feature for users to query the database directly (likely for admin or power users).
- **API Endpoints:**
  - Provides API access to various application functionalities.
- **Changelog:**
  - Track updates and changes to the application.
- **Multi-User Support:**
  - Designed to support multiple users, each with their own private data.

## Project Structure Overview

- **`app.py`**: Main Flask application file.
- **`config.py`**: Application configuration settings.
- **`db.py`**: Database interaction utilities.
- **`extensions.py`**: Flask extension initializations.
- **`features/`**: Contains modules for core application features like dashboard, exercise management, stats, etc.
- **`forms/`**: WTForms definitions for login, signup, etc.
- **`migrations/`**: Database migration scripts (if using Flask-Migrate).
- **`routes/`**: Blueprint definitions for different parts of the application. This directory modularizes the web endpoints:
  - **`auth.py`**: Handles user authentication, including signup, login, and logout functionalities.
  - **`calendar.py`**: Manages routes related to displaying workout data in a calendar format.
  - **`changelog.py`**: Provides endpoints for viewing application changes and updates.
  - **`endpoints.py`**: Defines API endpoints for programmatic access to application data and features.
  - **`export.py`**: Contains routes for exporting user data, likely in formats like CSV or JSON.
  - **`notes.py`**: Manages CRUD (Create, Read, Update, Delete) operations for user notes.
  - **`programs.py`**: Handles routes related to creating, viewing, and managing workout programs.
  - **`sql_explorer.py`**: Provides the backend for the SQL Explorer feature, allowing direct database queries.
  - **`tags.py`**: Manages routes for creating, assigning, and filtering workout tags.
  - **`workout.py`**: Contains the core routes for logging, viewing, and managing workouts and their associated data (sets, exercises, etc.).
- **`static/`**: Static assets like CSS, JavaScript, and images.
- **`templates/`**: HTML templates for rendering web pages.

## Future Enhancements / Feature Ideas

Here are some ideas for new features and improvements that could be added to the Workout Tracker:

- **Social Features:**
  - Friend system: Allow users to connect with friends.
  - Shared workouts/programs: Option to share workout plans or achievements with friends.
  - Leaderboards: Optional leaderboards for friendly competition (e.g., most workouts logged, PR improvements).
- **Advanced Analytics & Reporting:**
  - Body measurement tracking (weight, body fat %, etc.) and correlation with workout data.
  - More detailed exercise-specific progress charts (e.g., 1RM progression for specific lifts).
  - Volume tracking (total weight lifted per workout/week/month).
  - Rest timer integration within workout logging.
- **Goal Setting & Tracking:**
  - Allow users to set specific fitness goals (e.g., "Bench Press 100kg", "Run 5km in 25 mins").
  - Track progress towards these goals.
- **Exercise Library Enhancements:**
  - Ability to add exercise demonstration videos or images.
  - Categorization by muscle group or equipment.
  - User-contributed exercise variations.
- **Mobile-First Responsive Design:**
  - Ensure the application is fully usable and looks great on mobile devices.
- **Offline Support / PWA:**
  - Progressive Web App (PWA) capabilities for offline access or a more app-like experience.
- **Notifications & Reminders:**
  - Reminders for scheduled workouts.
  - Notifications for hitting personal records or achieving goals.
- **Data Import:**
  - Allow users to import workout data from other apps or CSV files.
- **Customizable Dashboard:**
  - Allow users to customize the information and widgets displayed on their dashboard.
- **Workout Templates:**
  - Pre-built workout templates for common goals (e.g., strength, hypertrophy, endurance).
- **Integration with Wearables:**
  - Ability to sync data from fitness trackers (e.g., Garmin, Fitbit, Apple Watch).

## Contributing

(Details on how to contribute to the project, if applicable. e.g., coding standards, pull request process)

