Product ·
Invoice Badger
Invoicing for UK freelancers that you drive by talking to your AI, with a web UI for everything the conversation is bad at.
Most invoicing tools assume you want to sit in them. I did not. The work of raising an invoice is remembering what you did and for whom, and that is a conversation, not a form.
Invoice Badger is invoicing you can drive by saying "log ninety minutes on Acme for the API fixes" to an assistant, and having it land against the right client at the right rate.
How it is built
An MCP server behind OAuth, so an AI assistant can act on your behalf without you pasting an API key anywhere. The tools are the operations you would actually name out loud: add a client with an hourly rate, open an invoice, log time, add a fixed-fee line, mark it sent, mark it paid, ask what is outstanding.
Underneath it is a Cloudflare Worker with D1, which suits the shape of the problem: small amounts of data, read far more often than written, and no server to keep alive between invoices.
There is also a web UI, and that matters. Conversation is good at "log two hours on Thursday" and bad at "show me everything unpaid over thirty days, sorted". The two interfaces are for different jobs rather than one being a fallback for the other.
What building it taught
Shipping an MCP server behind OAuth is still rare, and the interesting part is not the protocol. It is what happens when an assistant acts as you. Through MCP, at the point of receipt, nothing distinguishes an action you took from one your agent took on your behalf. That is fine for logging time and much less fine for anything that leaves the building.
Scope discipline is the whole product. There is a version of this that does expenses, projects, quotes, multi-currency and VAT returns. That version does not get finished by one person. Deciding what it refuses to do has been more of the design work than deciding what it does.
It is a personal tool that happens to be public. There is no growth push behind it, which is a deliberate decision rather than a failure. It solves a problem I have, it is cheap to run, and the constraint that it must stay simple enough for one person to maintain is what keeps it good.