Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Personal Ledger

License Issues Contributors Forks Stargazers


Logo

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
  1. About The Project
  2. Project Includes
  3. Getting Started
  4. Developing With This Repo
  5. Usage
  6. Roadmap
  7. Contributing
  8. License
  9. Contact
  10. References
  11. Similar Applications

About The Project

Personal Ledger Screenshot

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.

(back to top)

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:

(back to top)

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.

(back to top)

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:

TaskWhat it does
watch-tuiRebuild and rerun the TUI on file changes
docs-rustdocBuild Rust docs (rustdoc)
docs-mdbookBuild mdBook documentation
docs-buildBuild all documentation (docs-rustdoc + docs-mdbook)
docs-serveServe mdBook documentation on port 8001
db-dropDrop the dev database
db-createCreate the dev database
db-migrate-clientApply the Client-Ledger migrations
db-migrate-sync-serverApply the Sync Server migrations
db-migrateApply both the Client-Ledger and Sync-Server migration sets
db-prepare-generateRegenerate the sqlx query cache for lib-database
db-prepare-checkCheck the sqlx query cache is up to date
dbReset 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-database exists on disk but is not currently a workspace member — it’s mid-development and not yet wired into server. Build/test it directly with cargo build --package lib_database, or add it back to [workspace].members if 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.

(back to top)

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

(back to top)

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.

(back to top)

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!

  1. Fork the Project
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

(back to top)

License

Distributed under the GPL3.0 License. See LICENSE.txt for more information.

(back to top)

Contact

(back to top)

References

The following is a list of resources you find helpful and would like to give credit to:

(back to top)

Similar Applications

Below is a list of similar applications that you might prefer to use:

(back to top)