Local-first cashflow planning app
Project description
Payday 💸
A local-first cashflow planning app. Model your household income, bills, and transfers as recurring events, then project balances and guilt-free spending buffers weeks into the future.
Runs in your browser via a local server — launch it with payday, close the tab when you're done. Your data stays on your machine.
Install
pip install payday-planner
Or with uv:
uv tool install payday-planner
Then run it from anywhere:
payday
The app opens at http://localhost:8501. On first launch it loads a demo setup — your data auto-saves between sessions once you configure your own blueprint.
Features
- Dashboard — Net worth snapshot, per-person guilt-free spending buffers, account balances, 90-day cashflow projection chart, and a 14-day upcoming events checklist
- Accounts — Track chequing, savings, debt, investment, and liability accounts with balances and ownership
- Events — Define recurring or one-time money movements (inflows, outflows, transfers) with flexible frequencies and optional end dates
- Timeline — Browse all upcoming events in a calendar view, filterable by owner
- Flow Diagram — Auto-generated Mermaid diagram showing how money moves between accounts
- Oracle — AI assistant (Gemini or Ollama) with full context of your setup; can answer questions and propose blueprint updates
- Export / Import — JSON blueprint for full backup/restore, plus CSV export and Mermaid diagram download
Your Data
Your financial blueprint is stored locally at:
- macOS:
~/Library/Application Support/payday/blueprint.json - Linux:
~/.local/share/payday/blueprint.json - Windows:
%APPDATA%\payday\blueprint.json
It auto-saves on every page render and auto-loads on startup. To point at a different file:
PAYDAY_BLUEPRINT=~/Documents/finances.json payday
Concepts
Accounts
Each account has a type and an owner:
| Type | Description |
|---|---|
chequing |
Day-to-day spending account |
savings |
Savings or emergency fund |
investment |
RRSP, TFSA, brokerage, etc. |
debt |
Line of credit, credit card |
liability |
Mortgage or other long-term liability |
| Owner | Description |
|---|---|
A |
Person A |
B |
Person B |
Joint |
Shared account |
Events
Events are the engine of the app. Each event is a recurring or one-time money movement:
| Field | Description |
|---|---|
| Type | inflow (money in), outflow (money out), transfer (between accounts) |
| Frequency | one-time, weekly, biweekly, monthly, quarterly |
| Anchor Date | The first occurrence — all future dates are derived from this |
| End Date | Optional — set for temporary events like a debt payoff installment |
| Tier | Priority order (1 = income, 2 = fixed bills, 3 = hub transfers, 4 = joint expenses, 5 = goals) |
Guilt-Free Buffer
The guilt-free buffer is the monthly amount left in each person's chequing account after all committed recurring spending — bills, transfers to the hub, and debt payments. It represents discretionary money that can be spent freely or added to savings without guilt.
Calculated as:
buffer = (recurring inflows into your chequing) − (recurring outflows + transfers out of your chequing)
One-time events are excluded — only true recurring commitments count.
Cashflow Projection
The Dashboard projects all account balances day-by-day for up to 365 days. The Net Worth tab shows total assets minus liabilities over time. The By Account tab lets you compare individual account trajectories.
Transfers to debt or liability accounts correctly reduce what is owed (e.g. a LOC payment lowers the LOC balance, keeping net worth flat).
Oracle (AI Assistant)
The Oracle has full context of your blueprint and can:
- Answer questions about your cash flow ("When does the LOC get paid off?")
- Generate payday checklists ("What do I do on Jan 10th?")
- Propose blueprint updates ("Add a $200/month car fund transfer from Hub to Savings")
When the Oracle suggests a blueprint change, a preview banner appears at the top of the page. Review the JSON diff and click Apply Update to accept it.
Backends
| Backend | Setup |
|---|---|
| Gemini | Get a free API key at aistudio.google.com, paste it into the sidebar |
| Ollama | Install Ollama, run ollama pull qwen2.5:7b, select it in the sidebar |
Development
git clone https://github.com/your-username/payday
cd payday
uv sync
uv tool install .
Run tests:
uv run pytest tests/ -v
Project Structure
src/payday/
app.py # Streamlit UI
engine.py # Calendar, projection, serialization, guilt-free buffer logic
models.py # Data models (Member, Account, Event, AllocationRule, Goal)
cli.py # Entry point
tests/
test_payday.py
pyproject.toml
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file payday_planner-0.1.0.tar.gz.
File metadata
- Download URL: payday_planner-0.1.0.tar.gz
- Upload date:
- Size: 94.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2656f8db19efc7dca19b341b015e8ee2dafc996b1369f705308f1c54fc2e5f62
|
|
| MD5 |
f51719c4def61ed23ac5905d55ed5f4a
|
|
| BLAKE2b-256 |
b3202d92481e1d9647820bd11ac1820cf8c4f7d442ee4edf32f6d212381f6578
|
Provenance
The following attestation bundles were made for payday_planner-0.1.0.tar.gz:
Publisher:
publish.yml on rafvasq/payday-planner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
payday_planner-0.1.0.tar.gz -
Subject digest:
2656f8db19efc7dca19b341b015e8ee2dafc996b1369f705308f1c54fc2e5f62 - Sigstore transparency entry: 1217668439
- Sigstore integration time:
-
Permalink:
rafvasq/payday-planner@a6903da864076e36e8fb2c75e4bbf4e590be5e2c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rafvasq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a6903da864076e36e8fb2c75e4bbf4e590be5e2c -
Trigger Event:
push
-
Statement type:
File details
Details for the file payday_planner-0.1.0-py3-none-any.whl.
File metadata
- Download URL: payday_planner-0.1.0-py3-none-any.whl
- Upload date:
- Size: 22.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
59294aed7892e4826fd8b38f65180b14d5b5bd17e60489c591bfb0f082555419
|
|
| MD5 |
272ffd2d319896feaba8d8b24e51464a
|
|
| BLAKE2b-256 |
4a458a1e667dc63cb294aa1e7f354ce1b8a6d3c776b8cbebe274847196045936
|
Provenance
The following attestation bundles were made for payday_planner-0.1.0-py3-none-any.whl:
Publisher:
publish.yml on rafvasq/payday-planner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
payday_planner-0.1.0-py3-none-any.whl -
Subject digest:
59294aed7892e4826fd8b38f65180b14d5b5bd17e60489c591bfb0f082555419 - Sigstore transparency entry: 1217668462
- Sigstore integration time:
-
Permalink:
rafvasq/payday-planner@a6903da864076e36e8fb2c75e4bbf4e590be5e2c -
Branch / Tag:
refs/tags/v0.1.0 - Owner: https://github.com/rafvasq
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@a6903da864076e36e8fb2c75e4bbf4e590be5e2c -
Trigger Event:
push
-
Statement type: