🐝 A bill-splitting and expense tracking app
  • Python 50.4%
  • HTML 37.3%
  • CSS 10.6%
  • JavaScript 1.3%
  • Dockerfile 0.3%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Kamil Marut 4bea179ec8
All checks were successful
Push Docker Image / push (push) Successful in 25s
fix: Harden invitations, uploads and deploy
- Reject expired/used invitations at registration; malformed tokens no longer 500
- Case-insensitive email for login, registration and invites
- Roll back and report invitations whose email failed to send
- Timeout on Mistral OCR request; gunicorn timeout 60s
- Run migrations on server start; exit 1 on unknown process type
- 10 MB upload cap; block receipt scanning in archived groups
- Delete attachment files with expenses; strict temp receipt path; daily temp cleanup
- escapejs values interpolated into expense form x-data

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-25 21:27:16 +02:00
.forgejo/workflows ci: Update CI for current infra 2026-09-25 21:12:00 +02:00
accounts fix: Harden invitations, uploads and deploy 2026-09-25 21:27:16 +02:00
expenses fix: Harden invitations, uploads and deploy 2026-09-25 21:27:16 +02:00
groups fix: Harden invitations, uploads and deploy 2026-09-25 21:27:16 +02:00
spendbee refactor: Simplify views, forms and templates 2026-09-25 21:11:34 +02:00
tests fix: Harden invitations, uploads and deploy 2026-09-25 21:27:16 +02:00
.dockerignore chore: Update .dockerignore 2026-05-09 23:26:15 +02:00
.env.example fix: Properly link to the favicon 2026-05-10 12:40:50 +02:00
.gitignore feat(!): Rewrite app in Django 2026-05-09 23:16:46 +02:00
AGENTS.md fix(groups): Minor group fixes 2026-05-10 10:48:19 +02:00
bun.lock feat(!): Rewrite app in Django 2026-05-09 23:16:46 +02:00
docker-compose.yml feat(!): Rewrite app in Django 2026-05-09 23:16:46 +02:00
Dockerfile build(docker): Export requirements.txt on $BUILDPLATFORM and remove wheels 2026-05-11 15:10:31 +02:00
entrypoint.sh fix: Harden invitations, uploads and deploy 2026-09-25 21:27:16 +02:00
manage.py chore(linter): Fix many Ruff & mypy errors 2026-05-10 10:33:08 +02:00
package.json feat(!): Rewrite app in Django 2026-05-09 23:16:46 +02:00
pyproject.toml feat: Add django-nitro-mailer for email logging 2026-05-14 18:27:05 +02:00
README.md docs: Update README.md after rewrite 2026-05-09 23:19:22 +02:00
uv.lock feat: Add django-nitro-mailer for email logging 2026-05-14 18:27:05 +02:00

Spendbee

🐝 A bill-splitting and expense tracking app

Overview

Spendbee helps you track bills and expenses with friends. Create groups, add expenses, and see who owes what at a glance.

Features

  • User authentication
  • Create and join expense groups
  • Add expenses and split with selected members
  • Receipt scanning - Upload receipt photos and automatically extract items using AI (Mistral Document AI)
  • Multi-currency support - Track expenses in 30+ currencies with ECB exchange rates
  • Guest members - Add people without user accounts
  • Real-time balance calculation across currencies
  • Record debt settlements
  • View expense history and settlement history

Install

You can set up Spendbee using Docker or run it locally.

Docker

To set up Spendbee using Docker, follow these steps:

  • Clone the repository and navigate to the project directory.
  • Run docker compose up to start all containers

Local

You can also choose to run the webapp locally:

  • Clone the repository and navigate to the project directory.
  • Run uv sync to install dependencies using uv
  • Run uv run python manage.py runserver to start the development server

Environment

In both cases, you should use the .env.example file as a template for your environment variables. Copy it to .env and fill in the required values.

Usage

See entrypoint.sh for usage options.

To create an admin user, run docker compose exec web python manage.py createsuperuser and follow the prompts.

To apply database migrations, run uv run python manage.py migrate.

Development

In order to change the page's styles, you need to have Bun installed. Run bun run watch or bun run compile to compile TailwindCSS styles.