we convert donations to obscure hardware
  • Python 71.5%
  • Jinja 22.4%
  • CSS 4.3%
  • JavaScript 1.4%
  • Makefile 0.3%
  • Other 0.1%
Find a file
2026-02-19 00:06:59 +04:00
.github/workflows further simplify makefile and docker compose files 2025-09-30 09:22:38 +04:00
api fix total usd graph zero 2026-02-19 00:06:59 +04:00
docs add invoices 2026-02-08 06:06:48 +04:00
ui remove cards, add pos auth, create pos tx by entity name 2026-02-18 21:00:47 +04:00
.gitignore add makefile postgres backup/restore commands 2025-09-26 15:08:46 +04:00
.pre-commit-config.yaml update pre-commit hooks 2025-11-16 17:20:43 +04:00
.python-version replace pipenv with uv 2025-02-27 05:35:02 +04:00
docker-compose.ci.yml further simplify makefile and docker compose files 2025-09-30 09:22:38 +04:00
docker-compose.dev.yml huge redesign, menu fixes, ui simplification 2026-02-12 11:23:34 +04:00
docker-compose.prod.yml simplify docker compose files 2025-09-30 08:57:42 +04:00
docker-compose.yml further simplify makefile and docker compose files 2025-09-30 09:22:38 +04:00
Makefile make db-restore: drop db before applying sql 2025-09-30 11:05:35 +04:00
pyproject.toml add deposit ui 2025-07-22 08:51:43 +04:00
README.md Update TODO list in README.md (#17) 2026-02-07 04:47:53 +04:00
secrets.env.example remove cards, add pos auth, create pos tx by entity name 2026-02-18 21:00:47 +04:00
uv.lock add deposit ui 2025-07-22 08:51:43 +04:00

refinance

logo

refined financial system for a hackerspace. simple by design.

architecture

  • entity — anything that can send or receive money: human, hackerspace, rent, fridge.
  • transaction — move X from A to B. supports all currencies.
  • balance — sum of all transactions from/to an entity.
  • tags — for entities and transactions to perform a quick search.
  • treasury - a bank account, cash box or a crypto wallet, specified in a transaction

authentication

  • you can request a login link with your entity name
  • login link will be sent to all available destinations (telegram, signal, email, etc) details

prod

cp secrets.env.example secrets.prod.env
make prod

API: http://0.0.0.0:8000/docs UI: http://0.0.0.0:9000

dev

environment setup (first time)

cp secrets.env.example secrets.dev.env

create local environment with all dependencies

uv python install 3.12
uv sync --dev

open project in vscode, F1 python.setInterpreter, select .venv (workspace)

if you need to change project deps:

uv add packagename
uv remove packagename
uv sync

install pre-commit hook

source ./.venv/bin/activate
pre-commit install

run backend & frontend with live code reload

make dev

open http://localhost:8000/docs and http://localhost:9000

tests

make test

todo release

  • base classes
  • errors
  • unit tests
  • complex search
  • pagination
  • tags
  • transactions
  • balances
  • balance cache
  • date range search
  • payment splits
  • multiple auth providers
  • docker
  • authentication?
  • pytest ci
  • generic deposit service
  • usdt top-up
  • currency exchange
  • unit of work?
  • fixed amount participation in split
  • add split participants by a tag
  • grafana, statistics
  • treasuries
  • logging
  • postgres
  • card processing

todo techdebt

  • migrations
  • pass tags as a list, not as add/delete operations
    • fix ui tag management
  • misc validation of amounts (>0.00)
  • improve split ux
  • make a uniform deposit api CRUD, provider should be enum
  • update all boolean attrs to status enums
  • mobile ui
  • rename base to common where applicable
  • remove base service class

todo future features

  • permissions?
  • deposit ui
  • donation categories (entities?)
  • easy payment urls

tests notice

tests are mostly autogenerated by llm, given the route and schema. human review would be beneficial.

license

MIT