Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

30 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

πŸ’Έ Divvy

Track your expenses, split the costs, keep the friendships πŸ’Έ

Dashboard


✨ Features

  • πŸ“Š Monthly dashboard β€” budget vs. spent per category with color-coded status (green / amber / red)
  • πŸ’° Expense tracking β€” log expenses with date, description, category, payment method and currency (ARS / USD / EUR)
  • 🀝 Shared expenses β€” mark any expense as shared (auto-splits 50/50 automatically)
  • πŸ—‚οΈ Categories β€” create custom categories with emoji icons and monthly budgets
  • πŸ’³ Payment methods β€” manage your cards, wallets and cash methods
  • πŸ“₯ CSV export β€” download monthly expense reports
  • πŸŒ™ Dark mode UI β€” clean, modern interface

πŸ—ΊοΈ Roadmap

Divvy's vision goes beyond personal finance β€” towards an app where friends, roommates or partners can manage their shared expenses together.

  • Multi-user support with authentication
  • Shared expense groups (roommates, trips, events)
  • Automatic balance calculation between users
  • Settle up / payment recording
  • Monthly summary notifications

πŸ› οΈ Tech Stack

Layer Technology
Frontend React 18, Vite, Chart.js, CSS Modules
Backend FastAPI (Python 3.12)
Database MySQL 8.0
ORM SQLAlchemy 2.0
Migrations Alembic
Containerization Docker, Docker Compose
Deployment Railway

πŸ—οΈ Architecture

divvy/
β”œβ”€β”€ backend/
β”‚   β”œβ”€β”€ main.py               ← App entry point + startup
β”‚   β”œβ”€β”€ database.py           ← MySQL connection (SQLAlchemy)
β”‚   β”œβ”€β”€ models.py             ← Database models
β”‚   β”œβ”€β”€ schemas.py            ← Pydantic validation schemas
β”‚   β”œβ”€β”€ alembic/              ← Database migrations
β”‚   β”‚   └── versions/
β”‚   β”‚       β”œβ”€β”€ 0001_initial.py
β”‚   β”‚       └── 0002_example.py
β”‚   └── routes/
β”‚       β”œβ”€β”€ gastos.py
β”‚       β”œβ”€β”€ categorias.py
β”‚       └── medios.py
β”œβ”€β”€ docs/
β”‚   └── screenshots/          ← App screenshots for README
|   β”œβ”€β”€ index.html 
└── frontend/
|   └── src/
|       β”œβ”€β”€ api/              ← API client (axios)
|       β”œβ”€β”€ components/       ← Reusable components
|       β”œβ”€β”€ pages/            ← Dashboard, Expenses, Categories, Payment Methods
|       β”œβ”€β”€ store.jsx         ← Global state (React Context)
|       └── utils.js          ← Helpers (formatting, CSV export)      

πŸš€ Run Locally

Prerequisites

  • Docker Desktop
# 1. Clone the repo
git clone https://github.com/rominacuadra/divvy.git
cd divvy

# 2. Create local environment files
cp backend/.env.example backend/.env
cp frontend/.env.example frontend/.env.local

# 3. Start all services
docker-compose up --build
URL Service
http://localhost:5173 Frontend (React)
http://localhost:8000/docs API docs (Swagger)
http://localhost:8000/health Health check

Windows users: Make sure Docker Desktop is running before executing the command.

Access from mobile (same WiFi network)

# Mac/Linux
ipconfig getifaddr en0

# Windows β€” look for IPv4 Address
ipconfig

Open on mobile: http://YOUR_LOCAL_IP:5173


πŸ—„οΈ Database Migrations

# Apply all pending migrations
alembic upgrade head

# Auto-generate migration after model change
alembic revision --autogenerate -m "describe the change"

# Check current revision
alembic current

# Rollback one migration
alembic downgrade -1

☁️ Deployment

Deployed on Railway using two services pointing to the same GitHub repo with different root directories.

Service Root Directory Environment Variable
Backend backend/ DATABASE_URL
Frontend frontend/ VITE_API_URL

πŸ“„ VersiΓ³n en espaΓ±ol

README en espaΓ±ol β†’


πŸ“¬ Contact

About

Track your expenses, split the costs, keep the friendships πŸ’Έ

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages