Skip to content

LeonardoBringel/my-finance

Repository files navigation

💰 My Finance 💰

📌 About

Track income and expenses, plan monthly cash flow, and visualize your financial health through an intuitive dashboard. Sensitive data is encrypted at rest using Fernet symmetric encryption.

✨ Main Features

  • Dashboard — KPIs and charts summarizing income, expenses, and balance
  • Transactions — Record, filter, and manage financial entries by category
  • Cash Flow — Monthly planning using reusable templates
  • Categories — Custom income/expense categories per user
  • User Management — Admin panel for managing users
  • Encryption — Sensitive fields encrypted before persisting to the database
  • Fail2Ban - Fail2Ban integration for deployed environments

🚀 Technologies Used

Layer Technology
Language Python
Framework Streamlit
Database PostgreSQL
ORM SQLAlchemy
Migrations Alembic
Encryption cryptography (Fernet)
Auth bcrypt + PyJWT
Charts Plotly

🎨 Preview

TODO

🚚 Getting Started

Prerequisites

  • Python 3.13+
  • PostgreSQL running locally or remotely
  • uv (recommended) or pip

Setup

  1. Clone the repository
git clone https://github.com/LeonardoBringel/my-finance
cd my-finance
  1. Install dependencies
uv sync
  1. Configure environment variables Create a .env file at the project root:
DB_USER=your_db_user
DB_PASSWORD=your_db_password
DB_HOST=localhost
DB_PORT=5432
DB_NAME=my_finance

FERNET_KEY=your_fernet_key   # generate with: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())"

ENABLE_FAIL2BAN_LOGGING=false # enable this to add fail2ban integration
FAIL2BAN_LOG_PATH=/var/log/my-finance/auth.log
  1. Run database migrations
alembic upgrade head
  1. Start the application
streamlit run app.py

The app will be available at http://localhost:8501.

About

A personal finance management web application built with Streamlit and PostgreSQL.

Topics

Resources

Stars

Watchers

Forks

Contributors

Languages