Personal Ledger
Personal Ledger
Track your personal expense, investments and assets to help you understand what you have and to make informed decisions..
Explore the Docs
·
Report a Bug
·
Request a Feature
Table of Contents
About The Project
Personal Ledger aims to provide its users with an intuitive and user-friendly interface that offers insights into their spending habits and investment position. By presenting information clearly and concisely, users can effectively monitor their overall financial health, make informed decisions, and ultimately achieve their personal financial goals.
Motivation for Personal Ledger:
- Applications in general are opinionated, and finance applications are no different. Looking at the finance applications available, none ticked my boxes or were monthly subscription models with high fees.
- I niavely thought I could do it better.
- Funsy project to hone my programming skills.
Includes
The Personal Ledger has a number of standalone applications and services that can be combined to suit your preference. They include the following:
- Backend (Underdevement) : A backend server that can be accessed by front ends through an rpc interface. The backend can be a standalone binary service or Docker deployable.
- Web (Under Development) : A web frontend app that uses the backend for data quering. The web frontend can be a standalone binary service or Docker deployable
- Desktop (Planned) : A desktop app that wraps the web front end that can access the bakend or be standalone.
- TUI (Planned) : A text interface frontend that can access the backend or be standalone.
Built With
I have tried to keep the tech stack with Rust, because that is what I would like to learn and improve with. The Rust stack being used includes the following:
- Sqlite:
- Tonic:
- Tuari:
- Ratui:
Getting Started
At the moment Personal Ledger is under development, so there is no end-user installation yet — the backend server only wires up a Ping utility RPC. If you want to build, run or contribute to the code, see Developing With This Repo below.
Developing With This Repo
Personal Ledger is a Rust Cargo workspace. This section covers what you need to build, test and run it locally.
Prerequisites
Toolchain and dev-tool versions (Rust, protoc, mdBook, sqlx-cli, cargo-watch, cargo-audit) are pinned in mise.toml at the workspace root and managed by mise, which also defines the project’s dev tasks (mise tasks to list them). Install mise, then install the pinned tools for this repo:
curl https://mise.run | sh
cd personal-ledger
mise trust
mise install
mise’s shell/dir activation will also install the pinned tools automatically when you cd into the repo. Without this step, tools like protoc or sqlx-cli won’t be on your PATH.
Available Tasks (mise)
Beyond pinning tool versions, mise.toml also defines this project’s dev tasks — a replacement for the cargo-make/Makefile.toml setup this repo used previously. Run mise tasks at any time to list them with their descriptions straight from the config, or mise run <task> to run one:
| Task | What it does |
|---|---|
watch-tui | Rebuild and rerun the TUI on file changes |
docs-rustdoc | Build Rust docs (rustdoc) |
docs-mdbook | Build mdBook documentation |
docs-build | Build all documentation (docs-rustdoc + docs-mdbook) |
docs-serve | Serve mdBook documentation on port 8001 |
db-drop | Drop the dev database |
db-create | Create the dev database |
db-migrate-client | Apply the Client-Ledger migrations |
db-migrate-sync-server | Apply the Sync Server migrations |
db-migrate | Apply both the Client-Ledger and Sync-Server migration sets |
db-prepare-generate | Regenerate the sqlx query cache for lib-database |
db-prepare-check | Check the sqlx query cache is up to date |
db | Reset the dev database from scratch: drop, create, migrate, then refresh the query cache |
mise run watch-tui # rebuild + rerun the TUI on every save
mise run db # drop, recreate, migrate and refresh the local dev database
Building and Running
Most day-to-day work is plain cargo run against the workspace or a specific package:
# Build the whole workspace
cargo build
# Build just the server binary
cargo build --package server --bin server
# Run the server (reads config, initialises telemetry — currently does nothing else)
cargo run --package server
# Run the TUI, rebuilding and rerunning it on every file change
mise run watch-tui
Building lib-rpc requires a system protoc (protobuf compiler), provided via mise.toml. tonic_prost_build regenerates crates/libs/lib-rpc/src/generated/*.rs from the .proto files on every build; the generated files are checked in but should be treated as build output, not hand-edited.
Note:
crates/libs/lib-databaseexists on disk but is not currently a workspace member — it’s mid-development and not yet wired intoserver. Build/test it directly withcargo build --package lib_database, or add it back to[workspace].membersif you’re integrating it.
Testing, Linting and Formatting
# Test the whole workspace
cargo test
# Test a single crate
cargo test --package lib_config
# Lint and format
cargo clippy
cargo fmt
Documentation
Docs are built with mdBook and rustdoc via mise tasks:
mise run docs-build # docs-rustdoc + docs-mdbook
mise run docs-serve # serves mdBook on :8001
Agent-Assisted Development
This repo is set up to work with AI coding agents (like Claude Code). Repository conventions for agents live in CLAUDE.md, and project-specific skills live under .claude/skills/ (rustdoc conventions, tracing/log-level conventions, and unit-test patterns).
The agent development workflow (grilling out an idea, writing a spec, splitting it into tickets, implementing with TDD and code review) follows Matt Pocock’s Claude Code skills — worth a read as a reference for how contributions here are expected to move from idea to shipped code.
Usage
This space will be used to show useful examples of how a project can be used. Additional screenshots, code examples and demos work.
Include any links to more resources.
For more examples, please refer to the Documentation
Roadmap
- Map out the development workflow
- Develop REST API server (backend) minimum viable product
- Develop web server (frontend) minimum viable product
- Develop deployment integration
- Work through feature set:
- Feature 1
- Feature 2
See the Personal Ledger - Roadmap for a full list of proposed features.
Contributing
Contributions are what make the open source community such an amazing place to learn, inspire, and create. Any contributions you make are greatly appreciated.
If you have a suggestion that would make this better, please fork the repo and create a pull request. You can also simply open an issue with the tag “enhancement”. Don’t forget to give the project a star! Thanks again!
- Fork the Project
- Create your Feature Branch (
git checkout -b feature/AmazingFeature) - Commit your Changes (
git commit -m 'Add some AmazingFeature') - Push to the Branch (
git push origin feature/AmazingFeature) - Open a Pull Request
License
Distributed under the GPL3.0 License. See LICENSE.txt for more information.
Contact
- Ian Teda - ian@teda.id.au
- Project Link: https://github.com/IanTeda/personal-ledger
References
The following is a list of resources you find helpful and would like to give credit to:
Similar Applications
Below is a list of similar applications that you might prefer to use:
