App portfolio

Ledger Sync

Accounting automation Private internal tool

A local accounting workflow that reconciles bank and credit-card statements against a hand-kept double-entry ledger, proposes journal entries for unmatched activity, and lets every write be reviewed before an append-only, traceable posting step.

Ledger Sync's real Review & Post interface showing fictional accounts and proposed journal entries

The problem

Maintaining a detailed ledger by hand creates two different review burdens: proving that each account ties to authoritative statements and finding the activity that has not yet been booked. Automating writes too early would save time at the cost of trust.

The approach

Ledger Sync separates evidence, proposals, decisions, and posting. It reads statement exports and balance anchors, compares them with ledger activity, identifies mismatches, and prepares journal entries for human review before any approved rows are appended.

What it does

Statement-backed reconciliation

Use transaction exports for line matching and monthly statement balances as authoritative period anchors.

Explainable matching

Handle exact transactions, splits, reverse splits, timing differences, and likely amount errors while keeping unmatched items visible.

Review before posting

Approve, reject, skip, edit, or split a proposal in the local hub before activating the guarded write path.

Recoverable writes

Posting is append-only, idempotent, grouped into batches, and paired with an explicit undo operation.

Design decisions

The choices that shaped how the project works.

  1. Make dry run the default

    Reading and reporting happen freely, but a ledger write requires an explicit write flag or confirmed action in the review interface.

  2. Keep real financial data out of source control

    Personal charts, booking rules, statements, reports, and credentials remain local and gitignored; tests use fabricated fixtures.

  3. Treat false completion as a failure

    The workflow distinguishes a successful command from evidence that coverage advanced and reconciliation actually tied.

Built with

Python · FastAPI · React · Google Sheets API · Statement parsers · Synthetic test fixtures

Availability

Private internal tool. The screenshot shows the real interface running with fictional accounts and transactions; no ledger, statement, account, or client information appears on this page.

Explore the project

This tool remains private, but the rest of the portfolio includes projects you can explore directly.

View all projects