Author: Audrius Nznm GitHub: github.com/nezinomas Demo: https://stats.unknownbug.net
username: demo
password: 9J4wj#^zD0eFwS
Keeping is a self-hosted web platform for personal and household finance management combined with life tracking.
- Track expenses, incomes, transfers, debts, savings, pensions, and plans collaboratively.
- Central statistics (
bookkeeping) aggregates financial data for reports and dashboards. - Track personal metrics privately (books, drinks, counters) per user.
- Designed for shared household finances: superuser + other users can manage financial apps together.
- Fully tested backend (pytest 100% coverage) and modular Django architecture.
| Feature | Description |
|---|---|
| Collaborative finance | Superuser + other users manage all financial apps |
| Statistics & dashboards | bookkeeping aggregates data across financial apps |
| Private personal trackers | Books, drinks, counters are per-user |
| Accounts & transactions | Multiple accounts, transfers, automatic balance updates |
| Savings & plans | Track goals, budgets, and long-term finances |
| High Performance | Data processing powered by Polars |
| Tested | 100% pytest coverage |
Keeping follows a clean, modular Django architecture:
bookkeeping: The core statistics engine. Aggregates data from all other apps.accounts,incomes,expenses,savings,pensions,transactions: Financial management apps.books,drinks,counts: Personal life tracking metrics.plans: Budgeting and financial goal setting.core: Shared utilities, base classes, and layout components.
- Backend: Python 3.13, Django 6.0
- Data Processing: Polars (high-performance DataFrames)
- Frontend: HTMX, AlpineJS, SASS (Vanilla CSS/SASS workflow)
- Database: MySQL
- Testing: Pytest (100% coverage), Selenium (integration tests)
- Configuration:
.conffor environment-specific settings
- Engineer-focused: Modular, reliable, test-covered architecture.
- Household collaboration: All users manage financial data together in a shared journal.
- Private personal metrics: Users maintain their own habits without exposing them to others.
- Modern Frontend: Uses a "No-Build" or "Light-Build" approach with HTMX and AlpineJS for a SPA-like feel without JS complexity.
- Clone the repo:
git clone https://github.com/nezinomas/keeping.git- Create
.conffrom template:
cp .conf___TEMPLATE .conf-
Set environment variables in
.conf([django] and [database] sections). -
Install requirements:
uv sync --all-extras- Migrate the database:
python manage.py migrate- Create media folder:
mkdir media; chmod -R 755 media- Run tests:
fast: uv run pytest -n auto -k "not webtest"
slow: uv run pytestLicense: MIT Author: Audrius Nznm GitHub