Travis CI checks removed due to elimination of free plan tier for OSS. A new equivalent CI/CD tool will be required.
Debt Growth Outlook Visualization and Repayment Decision Assitant
A tool that leverages multiple visualizations to show at a glance the outlook for multiple debts. By having a visual representation based on the input data, the user can easily realize which debts would cost more in the long term, helping in the decision of which one to repay more agressively first.
When managing debt, you usually want to save money. As a result, it is recommended to calculate which debt is costing you more money in the long term regarding accrued interest and pay that one more agressively.
Every couple of months, after doing some payments, I find myself re-calculating which debt is growing faster in order to adjust where to allocate money above the minimum payments. This is a relatively simple process when dealing with a few accounts, but it becomes tedious to do repeatedly and periodically for several accounts.
The intention of this project is to create a simple personal finance tool for saving money when repaying debt. This application would allow to keep track of credits and loans, their interest rates, how much is still owed, mothly minimums, etc. Such data will be used to calculate and recommend which debt(s) to pay above the minimum at that particular time and, if the same amount is paid each month, at which point that debt is no longer the one accruing the most interest (in absolute values, not percentages).
The idea is that the user can clearly see which debts are the fastest growing, helping them evaluate which are more beneficial to pay more aggressively first (and up to what amount) in order to save money in the long term and extablish a roadmap to free themselves from debt.
- Easily modify values for remaining principal, interest rate, minimum payment, budget available (these are variable, so this feature would be really useful).
- Present the user with a table of debts/loans that can be ordered based on different criteria.
- Draw a plot, graph, or some other visualization that shows the projected change of the different balances (principal and interest) based on current data.
In the root directory, run
docker build -f .devcontainer/Dockerfile -t freed-dev .This repository includes a .devcontainer configuration so you can open and edit the project inside a reproducible development container (VS Code or PyCharm). The devcontainer mounts the repository into the container at /workspaces/FreeD so edits you make locally are immediately visible inside the container.
Quick steps (VS Code)
- Install Docker and the VS Code Dev Containers extension.
- Open this repository folder in VS Code (open the repo root).
- Command Palette (Cmd+Shift+P) →
Dev Containers: Reopen in Container. - VS Code will build the image and start the
appservice using.devcontainer/docker-compose.yml. Your workspace will be mounted at/workspaces/FreeDinside the container. - (Optional) Connect to the container via terminal. You can forego this step and go directly to the Docker app and enter the container's terminal instead.
docker run --rm -it -v "$(pwd)":/workspaces/FreeD -w /workspaces/FreeD freed-dev /bin/bash- Use the Docker app's integrated terminal and run tests or the app:
# from inside the container terminal (or in the mounted workspace)
cd /workspaces/FreeD
python -c "from freed.debt_class import Debt; print('import ok')"
pytestHandling dependencies
- The devcontainer
Dockerfileinstallsuvand the Docker build runsuv syncto bake dependencies into the image. The.devcontainer/devcontainer.jsonalso runsuv --no-cache syncas apostCreateCommandso the running container has dependencies installed when the devcontainer starts. - If you edit
pyproject.tomlto change dependencies, re-runuv --no-cache syncinside the container (from/workspaces/FreeD) or rebuild the devcontainer image (Command Palette →Dev Containers: Rebuild and Reopen in Container).
PyCharm (Docker Compose interpreter)
- Configure Docker in PyCharm preferences (Preferences → Tools → Docker).
- Add a Python interpreter → Docker Compose, point it to
.devcontainer/docker-compose.yml, and select theappservice. - Ensure path mappings map your local project root to
/workspaces/FreeDin the container.
Notes and troubleshooting
- The image build copies only
pyproject.tomlanduv.lockinto the image during build to runuv sync. The full project is mounted at runtime; this allows live editing without rebuilding the image every change. - If files appear missing, verify the container mounts the workspace at
/workspaces/FreeD(check the running container'sls -la /workspaces/FreeD). - If dependency installation fails, check for missing OS-level build deps and add them in the Dockerfile's apt-get section.