Skip to content
Not-Bad-CompanyPublic

About

Free bookkeeping for freelancers: receipts, invoices and quotes, bank import, and tax figures ready when they're due. The Netherlands first.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

16 Commits

Folders and files

Repository files navigation

Stargazers Issues License


Ledgerbee

Ledgerbee

Free, self-hosted bookkeeping for freelancers and one-person businesses.
Scan receipts, send invoices and quotes, import the bank, and have your tax figures ready when they're due. The Netherlands is supported first.

Report a bug · Request a feature

Table of contents
  1. About the project
  2. Getting started
  3. Usage
  4. Roadmap
  5. Contributing
  6. License
  7. Contact
  8. Acknowledgments

About the project

Ledgerbee overview

I run a one-person company and didn't want to pay a monthly fee for bookkeeping software, so I built my own. Ledgerbee covers what a freelancer needs every day and at every tax deadline. Tax rules live in a module per country; the Netherlands (btw and inkomstenbelasting) is the first, and the app itself is in Dutch for now.

  • Receipts: photograph a bon and the phone reads it (on the device, offline). Share a PDF invoice from your mail and the server reads its text layer. You check the draft and confirm.
  • Invoices and quotes: numbered without gaps, with every field the Belastingdienst requires, a scan-to-pay QR code, e-mail delivery, reminders for late payers and credit invoices for corrections. An accepted quote becomes an invoice in one tap.
  • Bank: import a CSV or CAMT.053 export from ING, Rabobank, ABN AMRO, Knab or bunq. Payments are matched to invoices and receipts, and payments without a receipt are listed.
  • Btw-aangifte: every rubriek from 1a to 5g for a quarter, in whole euros the way the form wants them. Tap a rubriek to see the invoices and costs behind it before you file.
  • Inkomstenbelasting: winst, urencriterium, zelfstandigenaftrek, startersaftrek, MKB-winstvrijstelling, KIA, depreciation and kilometres, from tax tables that are updated each year.
  • Reminders: phone notifications and a daily e-mail before every deadline.

Your data stays on your own server. There is one user per install, and a filed quarter is locked so the numbers you filed can't change underneath you.

Btw-aangifte screen Costs screen

Built with

Rust SQLite Flutter Kotlin

The server is a single Rust binary (axum, rusqlite) that holds all data and all tax logic. The app is Flutter for Android and Linux, with Google ML Kit for on-device text recognition and an offline outbox for receipts scanned without signal.

Getting started

Prerequisites

  • A machine that stays on: a Raspberry Pi is plenty.
  • Rust (the toolchain is pinned in server/rust-toolchain.toml), pdftotext from poppler-utils, and sqlite3.
  • Flutter, to build the app.
  • Optional: a Brevo account for sending invoices and reminder e-mails. The free tier is enough.

Installation

  1. Clone the repo and configure the server:
    git clone https://github.com/Not-Bad-Company/ledgerbee.git
    cd ledgerbee/server
    cp .env.example .env    # set BOEK_SECRET to the output of: openssl rand -hex 32
    cargo build --release
  2. Create your account. It asks for a password and prints a QR code for your authenticator app plus ten recovery codes:
    ./target/release/boekhouding create-user you@example.nl
  3. Run it as a service. Adjust the user and paths in deploy/*.service first:
    sudo cp ../deploy/boekhouding.service ../deploy/boekhouding-backup.* /etc/systemd/system/
    sudo systemctl enable --now boekhouding boekhouding-backup.timer
  4. Keep it off the open internet. Either bind BOEK_BIND to your Tailscale address, or keep 127.0.0.1 and put it behind a reverse proxy or tunnel with https. The app refuses plain http to anything outside your own network.
  5. Build and install the app:
    cd ../app
    flutter build apk --release          # Android: install build/app/outputs/flutter-apk/app-release.apk
    flutter build linux --release        # Linux: build/linux/x64/release/bundle/
  6. Log in with the server address, your e-mail, password and a code from the authenticator. The overview asks for your company details first; they appear on every invoice.

Usage

  • When you pay: tap Kosten toevoegen, photograph the bon or pick the PDF, check the draft, confirm. From another app, share the file to Ledgerbee.
  • Once a month: import the bank export, link the suggestions and find the receipts that are missing.
  • Each quarter (deadline: the last day of the following month): open Aangifte → Btw, check the rubrieken, copy the whole-euro figures into Mijn Belastingdienst Zakelijk, pay, then mark the quarter Ingediend.
  • Before 1 May: open Aangifte → Inkomstenbelasting for last year, export the year as a zip of CSVs and attachments if your accountant wants it, and file.
  • Every January: add the new year's figures to server/src/tax/mod.rs. A missing year falls back to the newest one, and the report says so.

Backups run nightly: a consistent SQLite snapshot plus the attachments, kept for eight years (the bewaarplicht is seven). Set BOEK_BACKUP_REMOTE to an rclone remote for an off-site copy.

Roadmap

  • Receipts by camera, file or share sheet
  • Btw-aangifte with the sources behind each rubriek
  • Invoices with scan-to-pay, reminders and credit invoices
  • Quotes that turn into an invoice
  • Recurring invoices
  • Receipts forwarded by e-mail
  • UBL / Peppol export
  • English interface and more countries
  • Web version of the app

The full list is in docs/ROADMAP.md. See the open issues for known bugs and requests.

Contributing

Bug reports are the most useful contribution, especially wrong tax figures: say which rubriek or line, what you expected and why. Pull requests are welcome too. Read CONTRIBUTING.md first, because contributions come with a licence grant.

  1. Fork the project
  2. Create a branch (git checkout -b feature/quotes)
  3. Commit your changes
  4. Push the branch and open a pull request

License

Ledgerbee is free to use, change and self-host, for yourself or your own business, under the Elastic License 2.0. You may not offer it to others as a hosted or managed service.

Contact

Daan Hessen, Not Bad Company · contact@notbadcompany.com

Project link: github.com/Not-Bad-Company/ledgerbee

Acknowledgments

(back to top)

About

Free bookkeeping for freelancers: receipts, invoices and quotes, bank import, and tax figures ready when they're due. The Netherlands first.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages