This page is built from CHANGELOG.md in the repository by docs-site/scripts/sync-changelog.mjs, with commit and compare links removed. scripts/version.mjs generates the entries from Conventional Commits on every release. The first release run planted the v0.1.0 baseline from package.json; entries start after it.
To read the releases as a comic, one receipt slip per release, see the changelog on the project site.
2.2.3 (2026-10-31)
Hotfixes
- ui: clarify folder and month navigation
- ui: address medium design audit findings
- ui: phone viewer keeps a word on every control, opaque bar keeps its sticky rule, spacing from tokens
- viewer: desktop toolbar keeps its order, phone toolbar is five even 44px buttons
- ui: address low priority design audit findings
- ui: only unknown routes say Nothing here, shared CSS is one cached stylesheet, bank rows skip a repeated payee line
- ui: Didrik’s round 2 look-check and a centred Add pill on phones
- ui: one more spacing step under the check bar so the last card clears it
2.2.2 (2026-10-31)
Hotfixes
- archive: a seller with one month of data draws one normal bar, not one across the card
- pwa: the shared-files message names the Upload button
2.2.1 (2026-10-31)
Hotfixes
- pwa: the home screen name is the full app name, Nuits Receipts
2.2.0 (2026-10-31)
Features
- site: the pile files itself, a home page rebuilt around the archive
Hotfixes
- deploy: pass the config’s account to wrangler, so deploy works with several accounts
- pwa: serve the manifest without sign-in and add the iOS home screen tags
2.1.1 (2026-10-31)
Hotfixes
- ui: every block keeps an 8px gap, and ui-lint now checks gaps on every page
2.1.0 (2026-10-31)
Features
- add: one Add button in the same place on every page, phone and desktop (#58)
2.0.1 (2026-10-31)
Hotfixes
- home: open a document without the slow transition, and keep the list’s place (#57)
2.0.0 (2026-10-31)
Breaking changes
- home: Home becomes the archive of every finance document (#56)
1.16.0 (2026-10-31)
Features
- scripts: ui-lint, a rerunnable lintapple check of the rendered pages
- mockups: generator for the two v4 directions
- mockups: Native app and Warm paper pages
- mockups: Mix direction, paper look on the native layout with glass
- todo: only required facts put a receipt in To do
- discard: one click, no reason
- bulk: checkboxes are always visible, Select mode is gone
- parts: hide Part while there is only one part
- pwa: render install icons from the app glyph
- pwa: manifest, offline-only service worker, Android share target
- bank: To do | All, open payments first, no offset
- worklist: one model for list state, the next open row and return URLs
- worklist: every action returns to its list at the next open row
- worklist: overdue sales invoices join Receipts To do
- receipts: Review merges into Receipts To do, with All beside it
- settings: one Email senders list holds allowed, ignored and mail we didn’t keep
- db: undo_log table for one generic Undo
- undo: registry of undoable actions with same-batch snapshot and guarded restore
- undo: every resolving action leaves the list with one Undo
- import: one-step bank import with skip, Import anyway and an import Undo
- tokens: warn and info colour roles from the Mix mockup
- tokens: the Mix palette, glass at the lowest readable alpha, DM Mono
- settings: five sections and one Save
- forms: show a refused form in place on every route that takes typed input
- home: fold done setup steps, and skip a month held open only by a doubtful date
- receipt: fields to fill, a two-group More, and Approve above the phone keyboard
- app: every screen has a way back, and files and the OneDrive return work standalone
UI enhancements
- ui: Match, one Matched status, lighter Bank rows, fewer folds
- ui: ask before Move and OneDrive Disconnect, which have no Undo
- ui: a resolved row leaves by cross-document view transition, with the next row focused and described
- ui: Lucide icon sprite generated from lucide-static 1.65.0
- ui: ACTIONS and STATUS registries; every control renders from them
- ui: one row() for every list, and the Mix look on the Native layout
- ui: keyboard shortcuts, the ? sheet and a pending cue on submit
Hotfixes
- bulk: Discard still asks before it removes a match
- receipts: search with instr so a long query no longer fails
- worklist: move on from where the acted-on row stood, and land an Undo on what it restored
- bulk: refuse a bulk post whose list state is missing or invalid
- lists: true totals above 500, and select-all takes the first 500
- receipt: every receipt page form keeps the list it was opened from
- bank: an own transfer returns to the Bank view it was made on
- review: Merge duplicates returns to the To do it was offered on
- receipt: start the tab counts with the receipt read
- receipts: the To do header counts the list, and the old Merge form still merges
- import: a transfer paired across imports stops the import’s Undo
- bulk: never follow a redirect from the bulk post
- invoices: the sales All view waits on D1 once, not five times
- invoices: the older-invoices note counts other months only
- ui: the finished-steps fold sits 8 px from the panel edge
1.15.0 (2026-10-29)
Features
- app: bulk select and bulk actions on receipt lists
- bank: bulk actions on Bank, held mail and senders
Hotfixes
- app: pass bulk receipt ids as one bound parameter
- ui: align the bulk bar and keep focused rows clear of it
- app: add bulk-allowed senders in the order they were picked
- ui: accent the bulk checkboxes and trim the discard confirm
- ui: keep bulk runs honest: caps in all mode, Escape, chunk totals, no resubmit
- app: bulk totals, FX on approve, batched held mail, own-key checks
- ui: give the bulk checkboxes the app accent
1.14.0 (2026-10-28)
Features
- match: mark food delivery as not a purchase
Hotfixes
- match: match every receipt that exists and mark obvious non-purchases
1.13.0 (2026-10-28)
Features
- imports: XLSX statements, preamble header detection, stated totals and AI column mapping
- imports: PDF bank statements, Holvi by layout and other banks through Clairic
Hotfixes
- imports: scan XLSX XML in one linear pass under one 16 MiB inflate budget
1.12.4 (2026-10-25)
Hotfixes
- wait on the database about once per page
1.12.3 (2026-10-25)
Hotfixes
- load each page with fewer database round trips, and fetch tabs ahead
1.12.2 (2026-10-25)
Hotfixes
- ui: spacing, font and tap-target pass across app, site and docs (#20)
1.12.1 (2026-10-24)
Hotfixes
- Check waits for undated receipts, mapping before row errors, Needs you on Bank (#18)
1.12.0 (2026-10-24)
Features
- settings: show mail we didn’t keep, with Allow this sender (#16)
1.11.0 (2026-10-24)
UI enhancements
- ui: restyle the app to the Swiss workbench direction (#15)
1.10.0 (2026-10-24)
Features
- setup: a checklist that stays until done, /help glossary, plain Settings words (#14)
1.9.0 (2026-10-24)
Features
- nav: open on the oldest unsent month, one primary action, Undo for mark sent, Receipts and Invoices tabs (#13)
1.8.0 (2026-10-24)
Features
- bank: likely-match rows, Match all with Undo, searchable picker, one status vocabulary (#12)
1.7.0 (2026-10-24)
Features
- review: split view, two tiers of flags, sticky Approve, hand-off after the last receipt (#11)
1.6.0 (2026-10-24)
Features
- app: UX v3 foundations: tokens, feedback with Undo, plain errors shown in place (#10)
1.5.1 (2026-10-24)
Hotfixes
- receipts: saving a receipt keeps its manual bank match (#7)
1.5.0 (2026-10-24)
Features
- Discard receipts in Review, with undo, restore and bulk select (#6)
1.4.1 (2026-10-24)
Hotfixes
- strip account-holder labels from vendor names, and keep the docs changelog in step with releases (#4)
1.4.0 (2026-10-24)
Features
- one receipt per email, and better reading of email bodies (#3)
1.3.0 (2026-10-24)
UI enhancements
- One app shell, quiet statuses and a one-line footer notice on every page.
- Home shows the month as three steps (Check, Match, Send). Review is a plain list, and the receipt page puts the fields to fix first.
- Receipts, Invoices and Bank are quiet lists with one search field and one More menu per row. Statements are folded.
- Settings has one fold per section and an About section with the full notice, licence and trademark lines. The docs match the new screens.
- Much less text on every page.
1.2.0 (2026-10-24)
Features
- One five-item navigation: Home, Review, Receipts, Bank, Settings. Home closes the month.
- Bank holds the bookkeeping (statements, matching, transfers). Settings holds the configuration. Old addresses redirect.
1.1.0 (2026-10-24)
Features
- Mail from unknown senders is held for your approval. A new All receipts page.
Fixes
- Docs: the Cloudflare analytics script is allowed by the docs Content-Security-Policy.
1.0.2 (2026-10-23)
Fixes
- Settings: a list of allowed senders is limited to 75 addresses, so the longest list always fits the stored-setting limit. A value that is too long is refused with a clear message instead of failing on save.
- Month package: the “changes” package no longer replaces the full month index.
- Bank matching: a seller name that reduces to nothing never matches a payment.
- The app has a tab icon.
Documentation and project site
- The docs changelog no longer links to commits that are not in this repository.
- The docs site sends security headers, including a Content-Security-Policy.
- The phone tab bar and the More page are documented, and the deploy tutorial lists the right navigation.
- The project site has a Docs link, a 404 page and a sitemap.
1.0.1 (2026-10-23)
First public release. Earlier development history is not part of this repository.
Features
- Self-hosted receipt and invoice reader that runs on Cloudflare Workers: PDF and image uploads, optional email ingestion with an allowlist and SPF check, private R2 storage of originals, D1 storage of extracted rows.
- Extraction with Cloudflare’s Clairic model on Workers AI (preview), VAT arithmetic checked in code, review flags for uncertain rows.
- Vendor rules with a Clef fallback for product and expense type.
- Bank CSV import with a column mapping, payment matching suggestions and a list of payments with no receipt.
- Monthly package: costs in EUR by product and type, CSV or ZIP with every original and an index spreadsheet, optional OneDrive upload.
- Sales invoices you send, matched to money coming in.
- In-app settings, Cloudflare Access sign-in, compact mobile layout with a bottom tab bar.
- Project site in site/ with a demo video, and a documentation site in docs-site/.
- Apache License 2.0, no-warranty notice in the README and in the app.