Skip to main content
SpecZip LogoSpecZip
Personal Finance Expense Tracker TUI

Personal Finance Expense Tracker TUI

Track income, expenses, budgets, and savings goals with rich terminal charts — all in a single binary

SAby SpecZip Admin
Free seed library
v1.1.1
4 downloads0 views
File Integrity
sha256:a2495613…· 95.6 KB

Requirements

External Services

  • SQLiteself-hostable

Platform Notes

  • •Designed for local-first / offline operation

Data Model

accounts

Financial accounts for tracking money across different sources

idTEXTULID identifier
nameTEXT NOT NULLDisplay name (e.g., 'Main Checking')
typeTEXT NOT NULL CHECK(type IN ('checking','savings','credit','cash','investment'))Account classification
currencyTEXT NOT NULL DEFAULT 'USD'ISO 4217 currency code
opening_balanceTEXT NOT NULL DEFAULT '0'Starting balance as decimal string
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

categories

Hierarchical category tree for organizing transactions

idTEXTULID identifier
nameTEXT NOT NULLCategory name
parent_idTEXT REFERENCES categories(id) ON DELETE CASCADEParent category for subcategories
category_typeTEXT NOT NULL CHECK(category_type IN ('income','expense'))Income or expense category
colorTEXT NOT NULLHex color for visual identification
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

transactions

Financial transactions (income, expense, transfer)

idTEXTULID identifier, sortable
account_idTEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADEAssociated account
category_idTEXT REFERENCES categories(id) ON DELETE SET NULLAssociated category
dateTEXT NOT NULLTransaction date in YYYY-MM-DD format
amountTEXT NOT NULLAmount as decimal string (e.g., '42.50')
currencyTEXT NOT NULL DEFAULT 'USD'ISO 4217 currency code
typeTEXT NOT NULL CHECK(type IN ('income','expense','transfer'))Transaction type
descriptionTEXT NOT NULL DEFAULT ''Transaction description
notesTEXT DEFAULT ''Optional detailed notes
tagsTEXT DEFAULT '[]'JSON array of tags
is_recurringINTEGER NOT NULL DEFAULT 0Whether this is a recurring instance
recurring_rule_idTEXT REFERENCES recurring_rules(id) ON DELETE SET NULLParent recurring rule
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

budgets

Monthly budget allocations per category

idTEXTULID identifier
category_idTEXT NOT NULL REFERENCES categories(id) ON DELETE CASCADEBudgeted category
amountTEXT NOT NULLBudget amount as decimal string
monthINTEGER NOT NULLMonth (1-12)
yearINTEGER NOT NULLYear (e.g., 2026)
carry_forward_amountTEXT DEFAULT '0'Amount carried forward from prior month
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

goals

Savings goals with targets and tracking

idTEXTULID identifier
nameTEXT NOT NULLGoal name
target_amountTEXT NOT NULLTarget amount as decimal string
current_amountTEXT NOT NULL DEFAULT '0'Current saved amount
target_dateTEXTTarget date in YYYY-MM-DD format
budget_suggestionTEXT DEFAULT '0'Suggested monthly contribution
activeINTEGER NOT NULL DEFAULT 1Whether goal is active
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

subscriptions

Recurring subscriptions with billing tracking

idTEXTULID identifier
nameTEXT NOT NULLSubscription name
costTEXT NOT NULLCost per billing cycle
currencyTEXT NOT NULL DEFAULT 'USD'ISO 4217 currency code
billing_cycleTEXT NOT NULL CHECK(billing_cycle IN ('monthly','quarterly','yearly'))Billing frequency
start_dateTEXT NOT NULLStart date in YYYY-MM-DD
next_billing_dateTEXT NOT NULLNext billing date
alert_daysINTEGER NOT NULL DEFAULT 3Days before billing to show alert
category_idTEXT REFERENCES categories(id) ON DELETE SET NULLAssociated budget category
activeINTEGER NOT NULL DEFAULT 1Whether subscription is active
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

recurring_rules

Rules for auto-generating recurring transactions

idTEXTULID identifier
nameTEXT NOT NULLRule name
amountTEXT NOT NULLAmount per occurrence
currencyTEXT NOT NULL DEFAULT 'USD'ISO 4217 currency code
category_idTEXT REFERENCES categories(id) ON DELETE SET NULLTransaction category
account_idTEXT NOT NULL REFERENCES accounts(id) ON DELETE CASCADETransaction account
frequencyTEXT NOT NULL CHECK(frequency IN ('daily','weekly','bi_weekly','monthly','quarterly','yearly'))Recurring frequency
start_dateTEXT NOT NULLStart date in YYYY-MM-DD
end_dateTEXTOptional end date
created_atTEXT NOT NULL DEFAULT (datetime('now'))
updated_atTEXT NOT NULL DEFAULT (datetime('now'))

exchange_rates

Historical exchange rates for multi-currency support

idTEXTULID identifier
from_currencyTEXT NOT NULLSource ISO 4217 code
to_currencyTEXT NOT NULLTarget ISO 4217 code
rateTEXT NOT NULLExchange rate as decimal string
dateTEXT NOT NULLRate date in YYYY-MM-DD
created_atTEXT NOT NULL DEFAULT (datetime('now'))

audit_log

Immutable log of all significant application changes

idTEXTULID identifier
actionTEXT NOT NULLAction type (create, update, delete)
entity_typeTEXT NOT NULLEntity type (transaction, budget, category, goal)
entity_idTEXT NOT NULLAffected entity ID
beforeTEXT DEFAULT 'null'Before state as JSON
afterTEXT DEFAULT 'null'After state as JSON
timestampTEXT NOT NULL DEFAULT (datetime('now'))Action timestamp

net_worth_entries

Daily net worth snapshots for trend tracking

idTEXTULID identifier
dateTEXT NOT NULLSnapshot date in YYYY-MM-DD
total_assetsTEXT NOT NULL DEFAULT '0'Total assets as decimal string
total_liabilitiesTEXT NOT NULL DEFAULT '0'Total liabilities as decimal string
net_worthTEXT NOT NULL DEFAULT '0'Net worth (assets - liabilities)
created_atTEXT NOT NULL DEFAULT (datetime('now'))

settings

Application configuration settings

keyTEXTSetting key
valueTEXT NOT NULLSetting value as JSON string
updated_atTEXT NOT NULL DEFAULT (datetime('now'))
A comprehensive terminal-based personal finance tracker built with Rust and Ratatui. Track income and expenses across multiple accounts, set budgets with visual progress bars, create savings goals, monitor subscriptions, and analyze spending with bar charts, line charts, and pie charts — all in a fast, keyboard-driven TUI. Multi-currency support, CSV import/export, recurring transactions, bank import wizard, transaction reconciliation, and detailed monthly reports. Zero dependencies beyond a single binary. Your financial data stays local in SQLite.

External Dependencies

  • 🔴
    rust toolchain
    infrastructureRequired

    Rust compiler and cargo for building the application. Installed via rustup.rs. Pre-built binaries available for users without Rust.

Tags

No tags

Details

Category
productivity
Difficulty
high
Version
1.1.1
Published
6/16/2026

Related Blueprints

Coming soon...