Rotazioni: a linear programming workout split optimizer

Overview

Rotazioni: a linear programming workout split optimizer

Application screenshot

Dependencies

Dependencies for the frontend and backend are respectively listed in client/package.json and api/requirements.txt.
A self-contained docker installation is provided.

Deployment (Docker)

Make sure you have a docker service running on your machine.
Then run ./build_prod.sh && ./deploy_prod.sh to create and launch the docker container. The backend will be listening port 5000, while the frontend will be available through port 80.

Pull Requests

If you want to contribute to the project, you can do so by solving one of the many open issues or by creating new ones.
When proposing a pull request, make sure you do so on the production branch, so that when merged, the change will trigger the CI/CD pipeline.

Notes on localization

Rotazioni has been developed for an italian public, since it solves a very specific problem only found in a very specific italian community. Therefore there are currently no plans of internationalizing the product. Neverthless, if anyone wants to translate it and provide an easy internationalization setup, he's welcome to do it.

Comments
  • Implement input validation

    Implement input validation

    As of now, there is no input validation implemented. A possibly incomplete list of validation requirements is as follows:

    • All currently implemented textfields should be validated as non-negative integer inputs and should not be empty

    • The length of the microcycle should not exceed 30 days and should be a multiple of 7 days

    • The number of rest days should not exceed the length of the microcycle

    • The given maximum value of consecutive workouts should no exceed the length of the microcycle

    • The given maximum value of consecutive rest days should no exceed the length of the microcycle

    • Each rotation input should be an integer in the interval [0, 3]

    • Other inputs' constraints are implicitly enforced by the optimization procedure, so there is no need to manually specify them.

    Input validation should be performed prior to split generation and its outcome should be communicated to the user somehow

    enhancement 
    opened by crybot 1
  • Find a way to manipulate single table cells

    Find a way to manipulate single table cells

    It would be nice to be able to manually change the value of a given cell and make it a fixed constraint for the split generation. Note: a single cell can include more than one muscle group, so this use case should be taken into consideration when changing a cell's value

    enhancement 
    opened by crybot 1
  • Move to react-to-print for better pdf generation

    Move to react-to-print for better pdf generation

    Instead of using react-to-pdf, which generates a non-vectorized copy of a given React component, react-to-print allows to use the browser printing capabilities to export a well formed pdf.

    opened by crybot 0
  • fix papers not darkened in backdrop and some warnings fixes

    fix papers not darkened in backdrop and some warnings fixes

    I fixed the papers which weren't darkened in backdrop when the circular progress is open. I also fixed some warnings such as:

    • replacing some var with let and const
    • remove unused items
    opened by frankplus 0
  • Introduce

    Introduce "Richiami"

    Add the option to select the number of "richiami" to be added to the training split for each muscle group. Also, find a suitable english translation for the italian word "richiami".

    enhancement 
    opened by crybot 0
  • add docker compose

    add docker compose

    Hi there! ho added docker compose for an easy deploy. I have moved the frontend in the client directory and the backend in the api directory. See deployment instructions in README

    opened by frankplus 0
  • Transition to a more robust state management system

    Transition to a more robust state management system

    The current way of managing components' state flow is hacky at best. A more robust way of sharing state and values among components is required to make the application more scalable, efficient and extendable. Valid options include Formik and React-Redux.

    enhancement 
    opened by crybot 0
Releases(v1.1.0)
  • v1.1.0(Jun 23, 2021)

    This minor release of Rotazioni introduces:

    • Richiami: you can manually add and remove Richiami to the split, enforcing new constraints on the optimization procedure
    • Switchable dark mode: you can choose between light (default) and dark theme by clicking the upmost button on the left of the page. This preference is remembered for future uses
    • Minor UI/UX changes
    • Internal API changes
    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Jun 19, 2021)

Owner
Marco
Artificial Intelligence graduate student at the University of Pisa. Software engineer at Consorzio Metis. Author of the Napoleon chess engine.
Marco
Basic Hspice runner with Python

HSpicePy Bilgisayarınıza PATH değişkenlerine eklediğiniz HSPICE programını python ile çalıştırmanızı sağlayan basit bir araç. A simple tool that allow

1 Nov 16, 2021
Python requirements.txt Guesser

Python-Requirements-Guesser ⚠️ This is alpha quality software. Work in progress Attempt to guess requirements.txt modules versions based on Git histor

Jerome 9 May 24, 2022
An extension module to make reaction based menus with disnake

disnake-ext-menus An experimental extension menu that makes working with reaction menus a bit easier. Installing python -m pip install -U disnake-ext-

1 Nov 25, 2021
Minitel 5 somewhat reverse-engineered

Minitel 5 The Minitel was a french dumb terminal with an embedded modem which had its Golden Age before the rise of Internet. Typically cubic, with an

cLx 10 Dec 28, 2022
Plock : A stack based programming language

Plock : A stack based programming language

1 Oct 25, 2021
Blender Addon for Snapping a UV to a specific part of a Tilemap

UVGridSnapper A simple Blender Addon for easier texturing. A menu in the UV editor allows a square UV to be snapped to an Atlas texture, or Tilemap. P

2 Jul 17, 2022
Xbox-Flood is for flood anything

Intruduction Installation Usage Installing Python 3 Wiki Getting Started Creating a Key Intruduction Xbox-Flood is for flooding messages (invitations

kayake 4 Feb 18, 2022
A basic notes app to store your notes.

Notes Webapp A basic notes webapp to keep your notes.You can add, edit and delete notes after signing up. To add a note type your note in the text box

2 Oct 23, 2021
Template (v0) do Sistema Chatbot - atividade síncrona - INE5404

ine-5404-sistema-chatbot-template Template (v0) do Sistema Chatbot - atividade síncrona - INE5404 Veja abaixo um exemplo de funcionamento do sistema:

0 Dec 07, 2021
Sample microservices application demo

Development mode docker-compose -f docker-compose.yml -f docker-compose.dev.yml up -d or export COMPOSE_FILE='docker-compose.yml:docker-compose.dev.ym

Konstantinos Bairaktaris 1 Nov 14, 2021
a simple functional programming language compiler written in python

Functional Programming Language A compiler for my small functional language. Written in python with SLY lexer/parser generator library. Requirements p

Ashkan Laei 3 Nov 05, 2021
This repo is for scripts to run various clients at the merge f2f

merge-f2f This repo is for scripts to run various clients at the merge f2f. Tested with Lighthouse! Tested with Geth! General dependecies sudo apt-get

Parithosh Jayanthi 2 Apr 03, 2022
contextlib2 is a backport of the standard library's contextlib module to earlier Python versions.

contextlib2 is a backport of the standard library's contextlib module to earlier Python versions. It also sometimes serves as a real world proving gro

Jazzband 35 Dec 23, 2022
Sodium is a general purpose programming language which is instruction-oriented

Sodium is a general purpose programming language which is instruction-oriented (a new programming concept that we are developing and devising)

Satin Wuker 22 Jan 11, 2022
switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you :incoming_envelope:

🔮 setup_shift(SS.py) switching computer? changing your setup? You need to automate the download of your current setup? This is the right tool for you

Mohamed Elfaleh 15 Aug 26, 2022
App and Python library for parsing, writing, and validation of the STAND013 file format.

python-stand013 python-stand013 is a Python app and library for parsing, writing, and validation of the STAND013 file format. Features The following i

Oda 3 Nov 09, 2022
Drug Discovery App Using Lipinski's Rule-of-Five.

Drug Discovery App A Drug Discovery App Using Lipinski's Rule-of-Five. TAPIWA CHAMBOKO 🚀 About Me I'm a full stack developer experienced in deploying

tapiwa chamboko 3 Nov 08, 2022
ClamNotif: A tool to send you ClamAV notifications

A tool to forward notifications to different recipients categorised by two severity levels of the regular health reports produced by `clamscan` bundled with the ClamAV antivirus engine.

PiSoft Company Ltd. 1 Nov 15, 2021
Context-free grammar to Sublime-syntax file

Generate a sublime-syntax file from a non-left-recursive, follow-determined, context-free grammar

Haggai Nuchi 8 Nov 17, 2022
How did Covid affect businesses?

NYC_Business_Analysis How did Covid affect businesses? COVID's effect on NYC businesses We all know that businesses in NYC have been affected by COVID

AK 1 Jan 15, 2022