gitwtfhub

mikkelkrogsholm/rentemester

31TypeScriptAudience · developerComplexity · 4/5ActiveSetup · moderate

TL;DR

Early bookkeeping system for small Danish businesses. An AI agent posts routine entries while a hard rule engine enforces double-entry, VAT, and audit history.

Mindmap

mindmap
  root((rentemester))
    Inputs
      Receipt mailbox
      Bank CSV
      CVR lookups
    Outputs
      VAT report
      Invoice PDF
      Audit hash chain
    Use Cases
      Danish ApS books
      Freelancer ledger
      Auditable AI bookkeeping
    Tech Stack
      TypeScript
      SQLite
      Node
Click or tap to explore — scroll the page freely

Code map

Detail Auto

An interactive map of this repo's files and how they connect — its source is parsed live in your browser. Click Visualize to build it.

filefunction / class

Why anyone would actually build this

REASON 1

Run an AI bookkeeping agent for a Danish ApS with a rule engine that refuses incorrect postings.

REASON 2

Match a forwarded receipt mailbox against a bank CSV and auto post the clear cases.

REASON 3

Generate Danish VAT reports, EU reverse charge entries, and an accountant export package.

REASON 4

Produce deterministic invoices with PDFs, late-payment interest, and reminder fees under Danish rules.

Stack

TypeScriptSQLiteNode

Spinning it up

Difficulty · moderate Time to first run · 30min

README is in Danish and the rule engine assumes Danish accounting and VAT rules, so non-Danish users get limited value.

Wtf does this do

Rentemester is an upcoming bookkeeping system for small Danish businesses: freelancers, consultants, sole traders, and small private limited companies (ApS). The README is written in Danish. The pitch is that an AI agent handles the routine bookkeeping work while a hard rule engine in the core decides whether the result is actually correct under Danish accounting and VAT rules. The authors are deliberate that this is not a chatbot bolted onto an accounting tool. The core enforces double-entry bookkeeping, requires that debit equals credit, stores each receipt with documentation, and refuses to silently edit a posting once it has been booked. Errors are fixed by new offsetting entries rather than by changing history, and every action has to be auditable. Their slogan is roughly: the agent acts, the rules judge, the ledger enforces. A typical month is described this way: you forward receipts to a receipts mailbox, Rentemester imports your bank transactions, the system matches lines like Stripe, OpenAI, Google, or train tickets against the receipts, the clear cases are posted automatically, and the rest end up in a short task list, for example a restaurant receipt missing its purpose or a card payment without a matching receipt. At the end of the VAT period it produces a report and an export package for your accountant. The current code is an early prototype with the core already working: a SQLite ledger, append-only history, an audit hash chain for integrity, a Danish chart of accounts, bank CSV import with foreign currency handling, deterministic invoicing including PDF generation and payment registration, late-payment interest and reminder fees under Danish rules, credit notes, VAT reporting, EU reverse charge, CVR registry lookups with a local cache, and deterministic backup snapshots. A runnable demo lives in examples/agent-demo: it imports a bank CSV and six receipts, posts the clear cases automatically, and leaves the rest in an exception queue. It runs locally with no API keys. The README explicitly says the project is not aimed at large companies, payroll, point-of-sale, or stock-keeping.

Yoink these prompts

Prompt 1
Run the rentemester examples agent-demo. Walk me through the SQLite ledger after the bank CSV and six receipts are imported.
Prompt 2
Explain how rentemester enforces append-only history and the audit hash chain. Trace a posting through the rule engine.
Prompt 3
Add a custom matcher to rentemester for Revolut transactions that should map to a foreign currency expense account.
Prompt 4
Write a guide for a Danish freelancer migrating from Dinero to rentemester. List every step from chart of accounts to first VAT report.
Prompt 5
Translate the rentemester core domain types from Danish to English variable names without breaking the rule engine. Show the diff.
View the repo → Decode another repo

← mikkelkrogsholm on gitmyhub — every repo by this author, as a profile.

Don't trust strangers blindly. Verify against the repo.