This is an open source app for selfhosted family budget app
  • TypeScript 58.6%
  • Python 39.5%
  • JavaScript 1.1%
  • Mako 0.3%
  • Dockerfile 0.3%
  • Other 0.1%
Find a file
pickle-dev-fr d204c66d89
Update README with early access and Docker setup
Added early access notice and installation instructions.
2026-03-02 16:45:57 +01:00
backend fix: correcting for prod version 2026-03-02 14:32:45 +01:00
frontend fix: correcting for prod version 2026-03-02 14:32:45 +01:00
.gitignore feat: add crud base for all entities + tokenization and security 2026-02-02 12:51:06 +01:00
LICENSE Initial commit 2026-02-01 18:34:40 +01:00
README.md Update README with early access and Docker setup 2026-03-02 16:45:57 +01:00

FamilyBudget

FamilyBudget is a self-hosted, open-source personal budget management application designed for families and individuals who want full control over their financial data.

The project is distributed as Docker images. Installation is currently supported Docker-only.

The project is in Early access. Lots of functionality are missing and/or bugged. The conf file will change in the future and are currently unsure.


Features

  • Account management
  • Budget pots (envelope-style budgeting)
  • Transaction tracking
  • JWT authentication
  • PostgreSQL persistence
  • Production-ready Docker images

Tech Stack

  • Backend: Python (FastAPI)
  • Frontend: Static build served by Nginx
  • Database: PostgreSQL 16
  • Containerization: Docker & Docker Compose

Requirements

  • Docker
  • Docker Compose v2+

Quick Start (Docker Only)

1. Create a project directory

mkdir familybudget
cd familybudget

2. Create docker-compose.yml

services:
    backend:
        image: lepickledev/familybudget-backend:latest
        env_file:
            - ./.env
        depends_on:
            - db
        restart: unless-stopped

    frontend:
        image: lepickledev/familybudget-frontend:latest
        ports:
            - "8003:80"
        depends_on:
            - backend
        restart: unless-stopped

    db:
        image: postgres:16
        volumes:
            - dbdata:/var/lib/postgresql/data
        environment:
            POSTGRES_USER: ${POSTGRES_USER}
            POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
            POSTGRES_DB: ${POSTGRES_DB}
        restart: unless-stopped

volumes:
    dbdata:

3. Create .env

# ======================
# APP
# ======================
APP_ENV=production
APP_HOST=0.0.0.0
APP_PORT=8000

# ======================
# DATABASE
# ======================
POSTGRES_USER=postgres
POSTGRES_PASSWORD=postgres
POSTGRES_DB=budgetdb
POSTGRES_HOST=db
POSTGRES_PORT=5432

DATABASE_URL=postgresql+psycopg2://postgres:postgres@db:5432/budgetdb

# ======================
# JWT
# ======================
JWT_SECRET_KEY=CHANGE_ME_STRONG_SECRET
JWT_ALGORITHM=HS256
JWT_EXPIRE_MINUTES=1440

Important: Change JWT_SECRET_KEY before deploying to production.

4. Start the application

docker compose up -d

Access

Frontend is available at:

http://localhost:8003

The backend runs internally on port 8000 and is not exposed by default.


Data Persistence

PostgreSQL data is stored in a named Docker volume:

dbdata

To completely reset the database:

docker compose down -v

Updating

To pull the latest images:

docker compose pull
docker compose up -d

Production Recommendations

  • Use a strong JWT_SECRET_KEY
  • Restrict CORS_ALLOWED_ORIGINS
  • Use a reverse proxy (e.g., Traefik or Nginx)
  • Enable HTTPS (e.g., Let's Encrypt)
  • Configure automated backups

License

This project is open source. License details will be added soon.