Commit Graph
100 Commits
Author SHA1 Message Date
Peter Stockings 32b7527576 Change settings page use tabs 2026-01-31 13:58:22 +11:00
Peter Stockings 9e20976591 Add 'Machine vs Free Weight' & 'Compound vs Isolation' breakdowns for workouts 2026-01-31 13:11:21 +11:00
Peter Stockings 8b276804b9 Add popover for details on muscle distribution in a workout 2026-01-31 00:19:02 +11:00
Peter Stockings 5d2f3986bd Switch muscle distribution to a line chart 2026-01-31 00:11:06 +11:00
Peter Stockings d03581bff4 feat: assign tags to exercises and show muscle distribution of workout 2026-01-30 23:53:04 +11:00
Peter Stockings 78f4a53c49 Fix error when attempting to update set due to missing exercise id param in template 2026-01-30 22:54:50 +11:00
Peter Stockings e156dd30cc Add badges to sets showing stats ie weight/rep increase or how many weeks stalled 2026-01-30 22:42:06 +11:00
Peter Stockings eada1a829b Log LLM usage 2026-01-30 19:45:31 +11:00
Peter Stockings 1c500328d1 Fix AI SQL query generation 2026-01-30 19:37:40 +11:00
Peter Stockings 14d29724f1 Log SQL executions made via UI 2026-01-30 19:17:25 +11:00
Peter Stockings 4dcf589b63 Log login attempts 2026-01-30 19:07:09 +11:00
Peter Stockings b6443bc1e2 Make background of ERD transparent 2026-01-30 18:47:26 +11:00
Peter Stockings ec12072a33 Improve layout of ERD 2026-01-29 19:30:11 +11:00
Peter Stockings d72bb1f30f Make SQL queries require auth 2026-01-29 19:17:35 +11:00
Peter Stockings 722ff4d8e5 Show navbar title even on mobile 2026-01-29 19:01:11 +11:00
Peter Stockings cb08992e19 Make navbar more responsive on mobile 2026-01-29 18:56:41 +11:00
Peter Stockings 036d852aab Add authentication for update/delete endpoints 2026-01-29 18:41:24 +11:00
Peter Stockings e7520035c7 Add script to update password for a user 2026-01-29 18:40:49 +11:00
Peter Stockings 144e555abb Update logo 2026-01-29 17:17:42 +11:00
Peter Stockings 26dda12fff Make login/signup links responsive on mobile 2026-01-29 15:54:09 +11:00
Peter Stockings 2dc2b62d7b Improve performance of calendar view 2026-01-29 15:21:58 +11:00
Peter Stockings c14b43f9ab Revert back to using npx in build step due to dokku build pack using node (Should update this) 2026-01-29 13:26:10 +11:00
Peter Stockings 6fb9ba126f Generate ERD diagram from schema at build time rather then dynamically to reduce dependency on mermaid js library in the frontend 2026-01-29 13:20:45 +11:00
Peter Stockings 509d11443d Remove dependency on tail select component and instead role my own to minmise bundle size 2026-01-29 12:49:12 +11:00
Peter Stockings 04fe00412a Add tailwind build step 2026-01-29 09:30:51 +11:00
Peter Stockings 71315eb719 Speed up people_graphs 2026-01-29 00:41:08 +11:00
Peter Stockings 436eb16c32 Remove plotly in attempt to fix build error 2026-01-29 00:23:20 +11:00
Peter Stockings a94271c790 Remove license from readme 2026-01-29 00:10:55 +11:00
Peter Stockings c607f672c9 Update readme 2026-01-29 00:08:40 +11:00
Peter Stockings 3a0d4531b6 Switch to using polars 2026-01-29 00:05:25 +11:00
Peter Stockings dd82f461be feat: Add workout program management
- Create database tables: workout_program, program_session, person_program_assignment.
- Add Flask blueprint `routes/programs.py` with routes for creating, listing, viewing, and deleting programs.
- Implement program creation form (`templates/program_create.html`):
    - Allows defining program name, description, and multiple sessions.
    - Each session includes a name and dynamically added exercise selections.
    - Uses `tail.select` for searchable exercise dropdowns.
    - JavaScript handles dynamic addition/removal of sessions and exercises.
- Implement backend logic for program creation:
    - Parses form data including multiple exercises per session.
    - Automatically finds or creates non-person-specific tags based on selected exercises for each session.
    - Saves program and session data, linking sessions to appropriate tags.
- Implement program list view (`templates/program_list.html`):
    - Displays existing programs.
    - Includes HTMX-enabled delete button for each program.
    - Links program names to the view page using HTMX for dynamic loading.
- Implement program detail view (`templates/program_view.html`):
    - Displays program name, description, and sessions.
    - Parses session tag filters to retrieve and display associated exercises.
- Update changelog with details of the new feature.
2025-04-24 20:17:30 +10:00
Peter Stockings e7d125d57b Move workout tag logic into tags blueprint 2025-04-21 20:13:30 +10:00
Peter Stockings c88d28b47c Fix issue with newly added workout tags not being rendered 2025-04-20 17:05:32 +10:00
Peter Stockings 7aa7f9b8dc Partial refactor of tags functionality
Still need to move tags db logic to BP and move workout tag logic to BP as well
2025-04-19 21:10:34 +10:00
Peter Stockings e947feb3e3 refactor(sql_explorer): Replace Plotly with SVG rendering for plots
Replaces the Plotly-based graph generation in the SQL Explorer with direct SVG rendering within an HTML template, similar to the exercise progress sparklines.

- Modifies `routes/sql_explorer.py` endpoints (`plot_query`, `plot_unsaved_query`) to fetch raw data instead of using pandas/Plotly.
- Adds `utils.prepare_svg_plot_data` to process raw SQL results, determine plot type (scatter, line, bar, table), normalize data, and prepare it for SVG.
- Creates `templates/partials/sql_explorer/svg_plot.html` to render the SVG plot with axes, ticks, labels, and basic tooltips.
- Removes the `generate_plot` function's usage for SQL Explorer and the direct dependency on Plotly for this feature.
2025-04-15 19:34:26 +10:00
Peter Stockings 51ec18c461 feat: Add dismissible exercise progress graph to workout page
Adds a feature to view exercise progress directly from the workout page.

- Modifies `templates/partials/topset.html`.
- Adds a graph icon next to the exercise name in the topset list.
- Clicking the icon uses HTMX to fetch and display the progress graph for that exercise inline in a new table row.
- Implements a dismiss button using hyperscript to hide the graph after viewing.
2025-04-13 19:20:53 +10:00
Peter Stockings 3da0dc3b3d Fix for regression where selecting exercise for a new set on an exercise that hasnt had an set recorded wouldnt diplay the name 2025-04-13 18:04:11 +10:00
Peter Stockings 62e203bc2a feat: Add SQL script export option
- Added functionality to export the full database schema (CREATE statements) and data (INSERT statements) as a single `.sql` file.
- Created a new route `/export/database.sql` in `routes/export.py`.
- Added helper functions to `routes/export.py` (adapted from `sql_explorer`) to generate schema CREATE statements and data INSERT statements.
- Added a download link for the SQL export to the Settings page (`templates/settings.html`).
- Updated the changelog entry for data export to include the SQL option.
2025-04-12 21:17:19 +10:00
Peter Stockings 2d67badd32 Remove comments from generated SQL queries 2025-04-05 21:51:56 +11:00
Peter Stockings 64dda01af6 Add on requests==2.26.0 to requirements.txt 2025-04-05 21:38:17 +11:00
Peter Stockings ead73e8190 Add instructions on how to set Gemni model 2025-04-05 21:29:41 +11:00
Peter Stockings bd8a3fcdb2 refactor: Use REST API for Gemini SQL generation
- Modified the `_generate_sql_from_natural_language` helper function in `routes/sql_explorer.py` to use direct REST API calls via the `requests` library instead of the `google-generativeai` Python library.
- Added `requests` and `json` imports and removed the `google-generativeai` import.
- Updated error handling for API communication and response parsing.
- Updated the corresponding changelog entry.
2025-04-05 21:17:56 +11:00
Peter Stockings b875b49eca feat: Refactor endpoint listing into blueprint
- Moved endpoint listing and searching routes (`list_endpoints`, `search_endpoints`) and helper function (`get_routes`) from `app.py` into a new blueprint at `routes/endpoints.py`.
- Added `/endpoints` URL prefix to the blueprint.
- Registered the new `endpoints_bp` blueprint in `app.py`.
- Removed the original endpoint route definitions and helper function from `app.py`.
- Updated `url_for` calls in relevant templates (`endpoints.html`, `base.html`) to reference the new blueprint endpoints (e.g., `endpoints.list_endpoints`).
- Updated `templates/changelog/changelog.html` to document this refactoring.
```
2025-03-31 23:15:24 +11:00
Peter Stockings a8fe28339b I have refactored the SQL Explorer functionality into its own blueprint (routes/sql_explorer.py) with a /sql URL prefix. This involved moving the relevant routes from app.py, registering the new blueprint, removing the old routes, updating url_for calls in the templates, and documenting the change in the changelog.
Here is a conventional commit message summarizing the changes:

```
feat: Refactor SQL Explorer into blueprint

- Moved SQL Explorer routes (view explorer, save/load/execute/delete queries, view schema, plot queries) from `app.py` into a new blueprint at `routes/sql_explorer.py`.
- Added `/sql` URL prefix to the blueprint.
- Registered the new `sql_explorer_bp` blueprint in `app.py`.
- Removed the original SQL Explorer route definitions from `app.py`.
- Updated `url_for` calls in relevant templates (`sql_explorer.html`, `partials/sql_explorer/sql_query.html`, `base.html`) to reference the new blueprint endpoints (e.g., `sql_explorer.sql_explorer`).
- Updated `templates/changelog/changelog.html` to document this refactoring.
```
2025-03-31 23:00:54 +11:00
Peter Stockings eaeb4ab2c8 feat: Refactor workout functionality into blueprint
- Moved workout-related routes (create/delete/edit workouts, topsets, tags, start dates, show workout) from `app.py` into a new blueprint at `routes/workout.py`.
- Integrated workout view model logic from `features/workout.py` directly into `routes/workout.py` helper function `_get_workout_view_model`.
- Removed `features/workout.py` and the corresponding class instantiation in `db.py`.
- Registered the new `workout_bp` blueprint in `app.py`.
- Removed the original workout route definitions from `app.py`.
- Updated `url_for` calls in relevant templates (`workout.html`, `person_overview.html`, `partials/workout_tags.html`, `partials/topset.html`, `partials/start_date.html`, `partials/new_set_form.html`, `notes.html`, `calendar.html`) to reference the new blueprint endpoints (e.g., `workout.create_workout`).
- Updated `templates/changelog/changelog.html` to document this refactoring.
2025-03-31 22:38:48 +11:00
Peter Stockings 78436b230b feat: Refactor notes functionality into blueprint
- Moved notes-related routes (viewing/editing workout notes) from `app.py` into a new blueprint at `routes/notes.py`.
- Integrated notes-specific database logic (fetching and updating notes) directly into `routes/notes.py` helper functions, removing the corresponding methods from `db.py` for better encapsulation.
- Registered the new `notes_bp` blueprint in `app.py`.
- Removed the original notes route definitions from `app.py`.
- Updated `url_for` calls in `templates/partials/workout_note.html` to reference the new blueprint endpoints (e.g., `notes.get_person_notes`).
- Updated `templates/changelog/changelog.html` to document this refactoring in its own entry.
2025-03-31 22:08:47 +11:00
Peter Stockings 6095e76f10 Here is a conventional commit message summarizing the refactoring work:
```
feat: Refactor calendar feature into blueprint

- Moved calendar logic from `features/calendar.py` and `app.py` into a new blueprint at `routes/calendar.py`.
- Removed the `Calendar` class and refactored logic into helper functions within the blueprint module for better organization and readability.
- Eliminated the `pandas` dependency for date range generation, using standard `datetime` operations instead.
- Resolved circular import issues between `db.py`, `extensions.py`, and `routes/calendar.py` by adjusting import locations.
- Corrected `url_for` calls in templates (`calendar.html`, `partials/people_link.html`) to reference the new blueprint endpoint (`calendar.get_calendar`).
- Fixed an `AttributeError` related to HTMX request checking in the calendar route.
- Corrected `AttributeError` related to `.date()` calls on `datetime.date` objects in view processing functions.
- Updated `templates/changelog/changelog.html` to document the refactoring and associated fixes.
```
2025-03-30 22:20:48 +11:00
Peter Stockings 4a822ea2ba Update python buildpack version to reflect archived state 2025-03-30 22:02:09 +11:00
Peter Stockings 2465cad005 feat: Add static changelog page
Adds a new static page accessible at /changelog to display site updates and changes manually.

- Creates a new Flask Blueprint in `routes/changelog.py` to handle the route logic.
- Registers the `changelog_bp` blueprint in `app.py`.
- Creates the corresponding template `templates/changelog/changelog.html` extending the base layout.
- Adds a link to the Changelog page in the main sidebar navigation in `templates/base.html`, using an archive icon for consistency.
- Applies basic card styling to the changelog page content for improved visual structure.
2025-03-30 21:30:25 +11:00
Peter Stockings 39e91f2655 Add support to set degree of line of best fit for exercise progress graphs in custom view 2025-02-06 23:43:10 +11:00
Peter Stockings 116de33df3 Update load_user function 2025-02-02 17:45:54 +11:00
Peter Stockings b0296be9a0 On SQL explorer page add a button to copy the create tables database schema 2025-02-01 23:50:09 +11:00
Peter Stockings 5be7438afc Add in auth however there are no restrictions currently 2025-02-01 22:42:58 +11:00
Peter Stockings fb0e1519e4 Include Plotly js lib 2025-02-01 21:26:52 +11:00
Peter Stockings c1c4c4a960 Speed up sql plot generation 2025-02-01 21:06:21 +11:00
Peter Stockings 5fe003bcbf Add loading icons to sql plot and add clear button to results container 2025-02-01 21:06:01 +11:00
Peter Stockings 8b02307397 Add plot functionality to unsaved sql query and use htmx 2025-02-01 20:26:54 +11:00
Peter Stockings 55149c5ea9 Switch stats from camel case to snake case 2025-02-01 19:48:56 +11:00
Peter Stockings 677d44320c Fix for workout view showing sets out of order 2025-02-01 19:38:08 +11:00
Peter Stockings 07c2111b55 Remove unused functions from app.py 2025-01-27 14:54:31 +11:00
Peter Stockings f70438e4e4 Refactor dashboard 2025-01-27 14:46:20 +11:00
Peter Stockings a7592a29f6 Remove space in person id query param for tags 2025-01-27 13:14:55 +11:00
Peter Stockings d2c03cb81b Move person graphs down below title 2025-01-27 13:13:59 +11:00
Peter Stockings 2a5afe51b4 Add All tag to dashboard as well 2025-01-27 02:00:37 +11:00
Peter Stockings 1e625ba7a8 When on overview page add a static tag that selects everything, will have to refactor tags functionality soon 2025-01-27 01:57:36 +11:00
Peter Stockings 6319e488e1 Update page url after visiting page overview 2025-01-27 01:56:42 +11:00
Peter Stockings 2a614ae1c0 Fix view selector all->overview and make overview selected on overview page 2025-01-27 01:26:30 +11:00
Peter Stockings 6b741e50d0 Swtich from person list to new overview page 2025-01-27 01:17:23 +11:00
Peter Stockings 0ed0c20e93 Add person graphs endpoint for workouts per week & PRs per week, consumed via dashboard, person overview and notes 2025-01-27 01:00:50 +11:00
Peter Stockings 049af675cc Remove unused duplicated stats logic for dashboard 2025-01-27 00:18:02 +11:00
Peter Stockings 5ed737ee94 Refactor stats endpoint so supports filtering people and make dashboard page utilise it 2025-01-27 00:07:27 +11:00
Peter Stockings 527395d704 Make stats refresh, and add filter support to stats endpoint 2025-01-26 23:01:39 +11:00
Peter Stockings 23de6ef1f7 Render stats to block in overview 2025-01-26 22:19:34 +11:00
Peter Stockings 17c010ff7f Include total duration in new overview stats 2025-01-26 21:17:02 +11:00
Peter Stockings d1057aa8ba Add more stats 2025-01-26 21:10:22 +11:00
Peter Stockings 29f7dc1823 Revert "Revert "Add stats to new person overview page, just copied the logic so will need to refactor when the dashboard page is refactored as well""
This reverts commit c569793fd8.
2025-01-26 21:07:19 +11:00
Peter Stockings c569793fd8 Revert "Add stats to new person overview page, just copied the logic so will need to refactor when the dashboard page is refactored as well"
This reverts commit 4783ce6026.
2025-01-26 20:55:08 +11:00
Peter Stockings 4783ce6026 Add stats to new person overview page, just copied the logic so will need to refactor when the dashboard page is refactored as well 2025-01-26 20:39:20 +11:00
Peter Stockings dc543c7b75 Show exercise count in stats 2025-01-26 20:31:39 +11:00
Peter Stockings df3796b30e Dont trigger 'updatedPeople' on person dashboard render anymore 2025-01-26 20:04:15 +11:00
Peter Stockings cd6f3920f5 Add exercise progress graphs to new person overview page 2025-01-26 20:00:31 +11:00
Peter Stockings 2c8019ef7b Bugfix: Attempting to update a set would fail due to including multiple elements for exercise_id, repetition, & weight 2025-01-26 18:47:45 +11:00
Peter Stockings f932ea3c0c Dashboard is failing in prod but works locally
m, b = np.polyfit(relative_positions, estimated_1rm_scaled, 1)
ValueError: On entry to DLASCL parameter number 4 had an illegal value
2025-01-26 18:30:30 +11:00
Peter Stockings b0fb8895df Start refactoring person overview (list) page, currently is accessible through tags and workout exercise select. Doesnt have any stats or graphs 2025-01-26 18:21:44 +11:00
Peter Stockings 76b610c949 Minor refactor in attempt to speed up site 2025-01-25 00:16:32 +11:00
Peter Stockings 78f2ce2317 Fix bug introduced by last commit in which exercise progress graph wouldnt load upon selecting a exercise 2025-01-24 22:21:18 +11:00
Peter Stockings 5ffb08a994 Fix issue selecting a new exercise 2025-01-19 21:34:45 +11:00
Peter Stockings da73d816d6 Add favicon 2024-12-18 23:34:44 +11:00
Peter Stockings 71bf4b640c whoops update column heading order after moving methods to 2nd pos 2024-11-10 18:35:28 +11:00
Peter Stockings 5bdb586a2c For endpoints page, remove faulty logic that attempted to persisted column view preferences and move Method column to 2nd pos 2024-11-10 18:31:44 +11:00
Peter Stockings 8b248bad17 Make endpoints column filter responsive 2024-11-10 18:15:33 +11:00
Peter Stockings 285175c29d Update previous page link for workout navbar 2024-11-10 18:09:22 +11:00
Peter Stockings 5db18cbf18 Clear exercise select dropdown when clear search is clicked 2024-11-10 18:01:30 +11:00
Peter Stockings 16cd4e93e3 Change exercise select input from text to search so it adds a clear button on the right 2024-11-10 17:50:13 +11:00
Peter Stockings 2d6c738e3e Max SQL query text box resize to query length 2024-11-09 23:18:57 +11:00
Peter Stockings 0b7b804d62 Fix issue where redirecting to endpoints page would only show table 2024-11-09 19:20:06 +11:00
Peter Stockings 120a94ff45 Add page to list all flask endpoints with filter 2024-11-09 19:07:55 +11:00
Peter Stockings c7013e0eac Add ability to plot saved queries using plotly, need to check performance in production, also need to improve generate_plot function 2024-11-09 16:49:08 +11:00
Peter Stockings 23def088bb Add ability to save and edit queries, still need to add ability to edit queries 2024-11-08 23:09:19 +11:00
Peter Stockings 90cb1c1451 Add styling to sql query text area 2024-11-08 21:57:48 +11:00