Butineur is out

Three weeks ago I wrote about Butineur, the app that turns my chores into a hobby budget, and I ended that post with a list of things it wasn't yet: not open source, not in English, not installable by anyone but me.

All three are done. The repo is public, the interface speaks English, and there is an APK you can install today:

github.com/Chachigo/butineur

The idea, for anyone arriving here first

Every task you complete pays out an amount you set yourself. Dishes €2, tax return €40, ten minutes of exercise €1.50. On the other side, a shop with your hobbies and their price. The balance goes up when you do things, and down when you spend.

It is not real money. It is an envelope I allow myself, and the point is that spending now has a price tag, paid in chores. My filament budget has never been so well earned.

The previous post covers the features in detail: repeating tasks, counters, deadlines with the penalty of your choice, streaks that freeze instead of breaking, home screen widgets, the shop and a history that breaks down every euro. None of that changed. What changed is that you can now use it.

Installing it

Android 7.0 or newer, outside the Play Store.

The short version: add it to Obtainium from the link in the README and it updates itself. Otherwise grab the APK from the releases page and open it. Android will complain about installing from an unknown source, because it is one. The install guide walks through it step by step, including what to watch out for.

No Play Store listing, no account, no server, no network permission. The app holds your data and nothing else does.

English, and what that took

The interface follows the phone's language on first launch, and a picker in the settings forces either English or French.

The mechanism is deliberately boring: one file per language in src/lang/, plus one line to register it. Every language is typed on English, so a missing key fails the build instead of shipping a blank label. Adding a third one is an afternoon, and I would happily take the pull request.

Why I waited, and why AGPL

I said last time I was waiting for a stable base before publishing, because opening a project that still moves every day means committing to explaining choices you are in the middle of changing. That base arrived faster than I expected, mostly because the event log design held: the balance is never stored, it is replayed from an append only log, and that one decision has not needed a single revision since.

The licence is AGPL-3.0-only. Butineur is a personal app with opinions, and the sync server is coming: I would rather any hosted version of it stay open too.

Which brings me to the part that has not changed. Bug reports and ideas go through issues, and I would ask you to open one before writing a pull request. Not to gatekeep, but because the reward engine is the money path and I would hate to turn down code you already wrote.

What's next

The self-hosted server. Browser access from a desktop, and phone to desktop sync. This was the plan from day one and the log was built for it: append only, soft deletes everywhere, no derived total ever stored. The merge should mostly take care of itself, since there is nothing to reconcile.

The small stuff from actual use. Editing a quick task by long pressing it, marking frozen streaks and reached tiers on the consistency graph, making that graph start at the beginning of the week.

For now it has been running on my phone for a couple of months, it is the first todo app I still open, and it is finally something I can hand to someone else. Go take it.