Why I built my own credit card invoicing system (and why it made me very happy)
Tuesday.
After a long time, entering invoices with Bir in SnelStart again.
Using our admin system via the account (not a fan). A pleasant prospect, right?
In theory, no. In practice, definitely not:
– credit card payments – CSV files – PDF invoices everywhere – no decent import – everything matched manually, really awful... How do they charge 35 euros a month for this......
Ugh.
Almost all my current business expenses now go through our credit card. Lots of software, lots of AI, many subscriptions, often in USD. But SnelStart (and honestly, most accounting systems) don't handle that well. No automatic linking, no clear matching, no overview. So you're still comparing amounts, searching for invoices, and correcting errors.
And then I thought:
I'll just build this part myself.
The problem I wanted to solve
You have two worlds:
The credit card CSV
An export from ING with:date
amount (in EUR)
description
currency
The invoices
PDFs from suppliers. In various formats. EUR, USD, sometimes with VAT, sometimes without. Sometimes clear, sometimes hidden in small print.
What you want:
➡️ automatically know which invoice belongs to which transaction
➡️ and immediately see what is still missing
Not halfway, not approximately — but accounting accurate.
The solution (and yes, I went a bit too far)
I already had a subscriptions dashboard running, so I built a credit card module onto it. Two afternoons. About seven hours. A bit back and forth.
Started with Claude Opus 3 to sharpen the logic, and Aura for PB design.
Then Claude Cowork, which literally tracked down all invoices (that was magical).
And finally back to Replit, because that had all my existing foundation.
And then it became fun.
What the system does
1. Smart PDF reading (without AI poetry)
Invoices are chaos. So I built a parser that recognises what really matters:
Amounts
Recognises variants like:Amount due $12.99Invoice Total: €34,50Total USD $99.00
VAT
Needed for refunds. Automatically extracted from the PDF.Invoice numbers
In all the strange formats suppliers invent.
No guessing. Just pattern matching.
2. Exact matching (deliberately no fuzzy stuff)
The system matches only on exact amount.
Why?
No incorrect links
No “almost the same” nonsense
Complete certainty for the accounting
USD invoice?
→ converted → matched to the EUR amount on the credit card
No match = visible. Done.
3. Multiple currencies, neatly stored
For USD invoices, the system stores:
original amount + currency
converted EUR amount
used rate (implicitly via statement)
So everything remains verifiable.
4. See where you stand at a glance
In the dashboard, you immediately see:
🟢 everything linked
🟠 invoices still missing
Per supplier you see:
what is correct
what is outstanding
what needs attention
No searching. No doubt.
The workflow (simple, as it should be)
Upload the ING credit card CSV
Drag PDF invoices alongside
The system matches automatically
You only check what is incorrect
Export for the accountant, including VAT overview
What it brings me
What used to take hours, now takes minutes.
But more importantly: peace of mind.
You know:
what is correct
what is missing
how much VAT you can reclaim
No vague assumptions anymore. No manual comparisons.
It runs on a modern stack (React, TypeScript, PostgreSQL), but that's secondary.
This is not a tech project. This is a getting-your-life-back project.
The Stack
Frontend: React 18 + TypeScript + Tailwind CSS
Backend: Node.js + Express
Database: PostgreSQL with Drizzle ORM
PDF Parsing: pdf-parse library with custom regex extractors
And because I am visually oriented, it automatically loads company logos from Google's Favicon Service.
I build these kinds of systems because I need them myself.
And if they work for me, they usually work for others too.
V2.0 then I will....
Additionally, I think I will make a Gmail integration so that the invoices are found by the system and ready to load when the ING CSV arrives, and there is a Subscriptions component that I already had which is now included (so all AI and software subscriptions, which can automatically be cancelled or renewed in the future with Claude.
Onwards.
Peter.