LER BillCleaver
S1 Load
Pick individual PDFs/images, or a whole folder. You'll then choose an output folder where split bills are written. Everything runs in your browser — nothing is uploaded. Supported: .pdf .jpg .jpeg .png .tif .tiff .webp .gif .bmp
In Cloud mode the scans stream straight from Google Drive (no local files needed), your verification ticks auto-sync to a state file in that Drive folder every few seconds — so any device resumes exactly where you stopped — and exports & run JSONs write back into the same folder. Sign-in uses your lttcfo.com Google account; the app only touches the folder you load. On this local copy the button will explain if Google refuses the origin — it needs the hosted URL.
Do I need Claude API or a Supabase database? (short answer: no)
Claude Vision is now the default detector (Sonnet 5; switch to Opus 5 for hard pages). Claude looks at each page and returns the actual bounding box of every bill — those boxes become the suggested crops in the editor, which is far tighter than the whitespace method and greatly reduces manual dragging. A page marked AI boxes used Claude's areas; without a key (or if a call fails) the local engine's boxes are kept, so nothing breaks. The Vision cache (BinderReaper standard) remembers every page Claude has already read — re-running Detect on the same files costs 0 tokens; a stronger model's read (Opus) is never overwritten by a weaker one (Haiku). Save/Load cache moves it between machines or backs it up alongside your run JSON.
Supabase / a server database is not required. The unique-tracking registry lives in this browser's
localStorage (key lmb_registry), exactly like BinderReaper's brr_registry. Save-run JSON gives you portable, reload-anywhere state. A shared database would only matter later if several people needed one cross-machine "already-processed" list — not needed for this tool.
S2 Scan for multibills
Detection runs locally with a whitespace-projection engine tuned on real claim scans. It biases toward flagging — better to review a page that's actually single than to miss a real multibill. If you still see misses, switch to Aggressive; if singles get over-split, use Conservative. You can also fix any page by hand in Stage 3.
Files with 2+ bills are multibills to review. Files with 1 bill are moved to a safe category and pass through untouched — nothing gets split by mistake.
S3 Results
| File | ⚑ | Pg | Bills | Category | Status | Section | Verify | Edit |
|---|
Click Edit crops on any multibill to open the CamScanner editor: the suggested cut boxes are pre-loaded — drag, add, delete, rename, then Apply. After Apply the row shows a preview strip of each separated bill — the actual files are written at Stage-4 export (all pages at once), or use Apply + export page 💾 in the editor to write that page's bills immediately. Single/safe files need no editing.
Verification workflow: when a row's crops look right, click Pass ✓ (or tick several rows and use ✓ Verify ticked) — it's stamped yymmdd.hhmmss and moves to the Verified pool, out of your way. Filter to Needs verification to focus on what's left. Recropping a page automatically pulls it back out of the pool into the 2nd-pass queue, where Pass 2nd ✓ signs it off again; every pass/undo/recrop is logged with its timestamp in the run JSON.
Sections: the Section dropdown moves any page between In review, Recrop queue, Blank check, Scrapped and Needs attention (batch: tick rows → "Move ticked to…"). Blank suspects wait in Blank check ⚠ until you confirm scrap or rescue them — nothing is thrown away silently. Multipage bills: tick the related scans in order and ⧉ Group as multipage set; ⬆⬇ fixes each page's previous/next position, and export writes the set with SETn-pXofY names plus one combined PDF.
S4 Write & persist
Bills are written to _BillCleaver-out/ in your output folder, named {original}-p{page}-MB{n}of{m}.pdf. Save run writes the full state (counts, categories, crop boxes, page previews, and every verification tick with its timestamp) so you can resume any time. The app also autosaves after every tick/move/crop — if the tab ever closes unexpectedly, “↺ Restore autosave” brings your session back. To resume: click Load run, then click Choose files and pick the same files — your crops reappear automatically. Don't press “Detect bills” (that re-scans from scratch and discards the loaded crops). The run only stores the crop boxes, not the images, so re-picking the files is just to re-attach the pictures for editing/export.
About & changelog
LER BillCleaver v86 · 4-Sep-26 — Fable 5.1 is the new default detector, and Opus 5 works again. Claude Fable 5.1 joins the model list as the default (five times the Sonnet price; Sonnet 5, Opus 5 and Haiku 4.5 stay one click away). Models that think before answering put the thinking block first, so the detector had been reading
content[0] as empty on Opus 5 and quietly falling back to manual crops; it now reads the text blocks, gives thinking models room in max_tokens, and on Fable sends fallbacks:"default" so a page the safety classifier declines is answered by Anthropic's substitute model instead of coming back blank. v85 (the sign-in gate) remains unpublished.LER BillCleaver v84 · 20-Aug-26 — The results table stopped scrolling sideways — the page got wider instead. Stage 3's table needed about 1160px but the page was capped at 1140px, so it fell ~94px short and scrolled left-right inside the panel — a scrollbar within the page scrollbar — while roughly 590px of window sat empty to the right of the content on a normal wide monitor. The page now runs to 1560px, so the whole table (thumbnail through Edit crops) is visible at once, with room to spare for long file names and extra pills. Reading text is unchanged: paragraphs and hints stay pinned to the old 1104px measure rather than stretching to the new width, so nothing you read gets harder to read. The inner scrollbar is kept as a fallback — on a narrow laptop or tablet, where 1560px isn't available, the table still scrolls neatly inside its panel exactly as before instead of spilling across the page.
LER BillCleaver v83 · 20-Aug-26 — Vision model refresh — Sonnet 5 is the new default, Opus 5 joins the list. The detector now runs Sonnet 5 out of the box: for drawing crop boxes it reads pages as reliably as the old Opus 4.8 default at a fraction of the cost, which matters because every page of every claim batch goes through it. Opus 5 replaces Opus 4.8 as the strongest option — same price as 4.8, newer model — and is the one to pick for faint handwriting, crowded pages, or anything Sonnet gets wrong; Haiku 4.5 stays as the fastest/cheapest. Your existing cache is safe: the model-aware rule is unchanged, so pages already read by Opus are never re-read or downgraded by the new Sonnet default — you keep what you have already paid for, and only new pages use the new default. Model choice is still per-run in Stage 1.
LER BillCleaver v82 · 23-Jul-26 — Naming law: the original file name always leads. Custom piece names can no longer replace the output name — every exported bill starts with its original file name + page + MBnofm, and a manual piece name is only ever appended as a suffix: the piece named "1" now exports as
TSKhuanLoke-Claim-…-p1-MB1of2-1-00065.pdf, never 1-00065.pdf. Split-to-rows and the OK queue follow the same law. The ✏️ Custom piece names filter also stops flagging legacy __MB names from old versions (that's why it showed 186) — it now normalises them first, so it isolates only genuinely renamed pieces.LER BillCleaver v81 · 23-Jul-26 — ✏️ Custom-name category. New results filter ✏️ Custom piece names (n) isolates every page holding a manually-renamed piece, and such rows carry an ✏️ custom name pill — the direct way to hunt down oddly-named outputs like
1-00065.pdf from runs exported before v80 (output-name search only covers exports made from v80 onward, when the app started remembering what each piece was written as). Found it? Edit crops → clear the piece's name box → Apply, and it reverts to automatic naming.LER BillCleaver v80 · 23-Jul-26 — 🔎 Row search — find a bill by its OUTPUT file name. A search box in Stage 3 filters rows live across source file names, piece names, exported output names with their running numbers (each piece/page remembers what it was last written as — type
1-00065 or just 00065 and the row that produced that file appears), ◯ refs, 👤 claimants, Σ totals, OK numbers, LTT flags, remarks, sections, doc types, country and currency. Output names persist in the run JSON, so the lookup works even after reload.LER BillCleaver v79 · 23-Jul-26 — Traceable piece names + ✓-only export option. (a) A piece manually renamed to something tiny (like "1") used to export as the untraceable
1-00065.pdf — short or purely-numeric custom names are now automatically re-anchored to their source: TSKhuanLoke-Claim-…-p1-1-00065.pdf. (b) By default unverified pages DO export (their Verified / Verified At manifest columns are simply blank, so FileWhiz can filter on them); a new Stage-4 option ✓ Export verified pages only holds unverified pages back instead — they're listed as "held back" in the reconciliation, and a later export (or ⟳ resume-style re-run) writes them once verified.LER BillCleaver v78 · 23-Jul-26 — ✋ Stop on Write bills. A Stop button appears beside Write bills while an export runs: one click halts after the page currently being written. Everything already on disk keeps its 💾 mark, the reconciliation shows exactly what's still missing, and ⟳ Resume export picks up precisely where you stopped — numbering, manifest and register all continuing. Works for the ZIP export too.
LER BillCleaver v77 · 23-Jul-26 — Menu title separated + build footer. The "LER BillCleaver" title now sits above an accent rule, clearly apart from the stage links, and the menu gains a footer pinned to the bottom — build version, generation stamp (
gen yymmdd.hhmmss, MYT, stamped automatically at packaging), the hosted address and the firm name — stg-finance style, so any screenshot instantly tells you which build it is.LER BillCleaver v76 · 23-Jul-26 — Menu regrouped for the resume workflow. The left menu's actions now sit in three sections: Source & output (Choose files, Set output), Load / resume — Choose folder, Load run JSON and Load Vision cache together, in the order a resume actually happens, with Restore autosave beneath — and Run (Write bills, Reconcile) — on a clean white panel in LER style: white background, hairline border, charcoal text, accent-tint hover, LER-blue primary action.
LER BillCleaver v75 · 23-Jul-26 — Left menu polished to LER standard. (a) The duplicated 📁 Files & state strip disappears on desktop — the left menu is now the single home for those actions (the strip stays on small screens as the fallback). (b) Mobile: ☰ hamburger — the menu tucks away and slides out as a drawer on tablets/phones, closing itself after any tap. (c) Recoloured to the LER palette (masthead blue → graphite gradient, accent-blue primary action). (d) The four stage sections are separated by clear divider lines in the page, and the menu's groups by rules. (e) 💾 Write bills to output (and 🧾 Reconcile) now live in the menu's Run group — export from anywhere without scrolling to Stage 4; if export isn't ready yet it tells you why instead of doing nothing.
LER BillCleaver v74 · 23-Jul-26 — Resumable exports, stall alarms, a real progress bar & a left menu. (a) ⟳ Resume export: every page gets a 💾 pill the moment its files are on disk; if an export dies at 200/208 (Drive hiccup, closed lid, an error on one file) the failures are reported per page — export continues past bad pages instead of silently stopping — and ⟳ Resume export re-runs only the unwritten pages, with numbering, manifest and reconciliation carrying on (resumed reconciliations count earlier-written pages as delivered). The 💾 marks persist in autosave, so resume works even after a browser crash. (b) Stall alarm: if nothing progresses for 60 seconds mid-operation, a red alert tells you where it stopped and what to do — no more wondering. (c) The progress bar is now tall and light-yellow, visible from across the room. (d) A left menu bar (wide screens) jumps between the 4 stages and carries the S1 quick actions — Choose files/folder, Set output, Load run JSON, Restore autosave, Load Vision cache — no scrolling hunts.
LER BillCleaver v73 · 23-Jul-26 — Σ◯👤 scan: scoped & stoppable. The Stage-3 🧠 scan now follows your current results filter — set "Multibill only (127)" and it scans exactly those 127, "All files" scans everything missing a reading (the start message tells you the count and scope). And it can be stopped mid-run: the button turns into ✋ Stop · n/m while scanning — one click halts after the pages already in flight; everything read so far is kept and cached.
LER BillCleaver v72 · 23-Jul-26 — 🧠 Read Σ◯👤 directly in Stage 3. The AI reading of handwritten page totals, circled refs and claimants no longer requires opening the Σ◯ review: a 🧠 Read Σ◯👤 button in the Stage-3 toolbar scans every page that lacks a reading (same tiny Vision calls, progress in the status bar) and drops the results straight onto the rows as amber Σ ◯ 👤 pills and input boxes — so while working the table you can immediately see which page carries which circle and claimant, and spot the handwritten note pieces to crop out or right-click-tag. Confirm inline, or open the Σ◯ review for the grouped view.
LER BillCleaver v71 · 23-Jul-26 — 🧠 Σ◯ scan shows its progress in the panel. The backfill scan's progress used to go to the page status bar — hidden behind the review window. Now the button itself counts up ("🧠 42/127…"), a progress bar runs across the panel header, and a live line shows pages scanned and readings found; the final tally stays visible when the scan completes. Plus: the two buttons are now clearly Step 1 · 🧠 Scan pages with AI (spends small Vision calls, LOOKS at pages with no reading, produces amber suggestions) and Step 2 · ✓ Adopt all AI suggestions (free — just confirms the amber values; your own entries are never touched). And 👤 Apply to all: one claim file is usually one claimant — type the name once (pre-filled with the batch's most common) and stamp it onto every page that doesn't have one, e.g. "Khuan Loke" across the whole TSKhuanLoke batch.
LER BillCleaver v70 · 23-Jul-26 — 📑 Page document type in the ⚑ editor. The ⚑ LTT remark editor gains a Document type dropdown for the whole page — mark a full-page handwritten working as ✍ Claim summary (or SOA / card slip / e-wallet / bank slips / receipt) and it overrides Claude's classification: the export routes it accordingly (
_summaries/ or _payment-proof/, out of the bill-OCR stream), a green pill shows the confirmed type on the row, and changing the type resets verification like any other edit. Saved with the run and honoured everywhere the AI kind was. And Stage 3 identifies them separately: three new filters — ✍ Claim summaries, 📑 Statements of account and 💳📱🏦 Payment proof — each with its live count, matching pages by your ⚑ override, Claude's page reading, or any tagged piece on the page. One click isolates every summary or SOA in the batch.LER BillCleaver v69 · 23-Jul-26 — Tag pop-up no longer blocks the note. The browser's fixed prompt for Σ/◯/👤 values is replaced by a movable panel that opens beside the click (never over it), can be dragged anywhere by its ✥ header — and, better, shows the tagged note's own image inside the panel, so the amount/name you're transcribing is right above the input. Enter = OK, Esc = Cancel, and Cancel now cleanly aborts the whole tag instead of tagging without a value.
LER BillCleaver v68 · 23-Jul-26 — Any edit = verify again. Every image-affecting change now pulls the page back out of the Verified pool into the verify queue, always: recropping (as before), page rotation (editor or row 🪄/⟲⟳/degree), re-tagging pieces (Σ/◯/👤/untag — the bill count changed), 1️⃣ Not multibill, and T text notes (add, edit, recolor, resize, move, delete — they bake into exports). Each reset is logged with its reason and timestamp in the page history, and the ✓ Verified tile/filters update immediately — QC can never ship an edited page on an old pass. Data-only fields (Σ◯👤 values, flags, country/currency) deliberately do not reset verification.
LER BillCleaver v67 · 23-Jul-26 — 👤 Claimant — the third page property. A handwritten claimant note like "Om claim" is now tracked exactly like the Σ total and ◯ ref: Claude reads it at detect (and the 🧠 Σ◯ backfill scan picks it up on older pages), it shows as a 👤 pill and an inline 👤 claimant box on the Stage-3 row (amber until confirmed), it's editable in the Σ◯ review, the right-click tag menu gains 👤 Tag as claimant note (the piece stops counting as a bill, like Σ/◯ notes), and it carries to FileWhiz via a new Claimant column in the manifest and the LTT-remarks report.
LER BillCleaver v66 · 23-Jul-26 — Σ◯ editing right in Stage 3 + previews in the review. (a) Every relevant row in the results table now carries compact ◯ ref and Σ total boxes under the file name — amber shows Claude's unconfirmed reading, type to confirm or correct without opening anything; changes flow straight to the pills, groups, manifest and FileWhiz. (b) The Σ◯ review screen shows a page thumbnail on every row — click it for a full-size look (the handwritten total and circle right there) while you fix the fields; group totals recompute live.
LER BillCleaver v65 · 23-Jul-26 — 🧠 Σ◯ backfill scan. Pages detected before v56 (or served by an older Vision cache) show empty Σ/◯ fields in the review even when the handwritten total and circled ref are clearly on the page. The Σ◯ review now has 🧠 Read Σ◯ from pages (blanks only): it scans only the pages missing a reading with tiny targeted Vision calls (4 parallel lanes, progress bar, ~80 tokens each — printed receipt totals are explicitly ignored), fills the amber AI fields, and upgrades the Vision cache in place so the readings persist for every future re-run and sync to the Drive Brain. Then confirm per page or ✓ Adopt ALL as usual. And: tag from the row strip. Right-click any piece thumbnail in a row's preview strip (verified multibills included) to tag it Σ page-total note or ◯ circled ref — you're prompted for the value, the piece stops counting as a bill (amber outline marks it), the value lands in the page's Σ◯ properties, and "🧾 Untag" reverses it.
LER BillCleaver v64 · 23-Jul-26 — Running numbers are bills-only.
_page-originals and _evidence files no longer consume running numbers — the sequence now ties 1-to-1 to the bill count (bills, single/safe copies, OK-queue files, set pages), so the register's from/to range IS the bill range. Support copies are traced instead by their distinguishing suffix (…-original, …-evidence-2) plus the source file name they already carry, and the manifest links every one back to its page. Σ totals and ◯ refs were never files — they travel as page properties in the manifest and reports.LER BillCleaver v63 · 23-Jul-26 — Σ/◯ margin marks are page properties, not bills. A handwritten RM481.50 or a circled ⑬ on the page is now classified as an annotation (new kinds Σ PAGETOTAL / ◯ PAGEREF): it is excluded from the bill count (a page with two receipts + a total note + a circled ref counts 2 bills, not 4), never exported as a bill file, and never enters the Σ tally as an amount — instead its value feeds the page's Page Total and ◯ Ref properties, which carry to FileWhiz via the manifest, the Σ◯ review screen and the reports for next-phase reconciliation. The editor marks such pieces with a "Σ note / ◯ note" chip, the original-page copy preserves them visually, and the reconciliation expects them as intentional non-outputs.
LER BillCleaver v62 · 23-Jul-26 — Σ◯ totals & circle-group review, and currency in the file name. (a) New Σ◯ Review totals & groups button beside Export opens one screen with every multibill page and every page carrying a handwritten total or circled reference, grouped by ◯ ref with a combined total per circle (◯13 — 3 pages · RM 592.40). Amber fields are Claude's readings — type over them, ✓ AI per page, or ✓ Adopt ALL for the blanks; Σ tally verdicts update live, and the confirmed figures flow into the manifest and FileWhiz. (b) A page whose claim currency you've confirmed as non-MYR now carries it in the file name —
…-MB2of3-HKD-00113.pdf — so FileWhiz can route foreign-currency bills without opening the manifest (AI-only suspicion stays manifest-only until you confirm it in the ⚑ editor). (c) LTT remarks & flags carry over fully: besides the manifest's LTT Remark column (flags + free-text, per output file), each batch now writes LTT-remarks-*.xlsx in _reports/ — one row per flagged/remarked/evidenced page with its ◯ ref, total, flags, note, country, currency, evidence count and verification — the client-query list, ready-made for FileWhiz.LER BillCleaver v61 · 23-Jul-26 — Numbering audit + quick-export fix. Verified end-to-end that every bill file carries the 5-digit running number on every path — batch export, 🗃 flat set, OK queue, sets, originals, evidence AND the editor's "Apply + export page 💾" quick path (which continues the same sequence). Files that are deliberately unnumbered: the
_reports/ workbooks, the running-no register, run JSONs, per-summary table CSVs (they pair with their numbered image) and right-click PNG snips. If your file names show no numbers, you're running a build older than v50 — check the version box, and for the hosted PWA close and reopen the app so the service worker picks up the update. Also fixed: the quick "Apply + export page 💾" now applies 🧼 erase-overlap masks, same as the batch export.LER BillCleaver v60 · 23-Jul-26 — 🗃 One flat bill set is now the default. Every batch export puts ALL bills — split multibills and single/safe pages alike — together at the run folder root, ready to hand FileWhiz as one folder. Untick option 4½ if you prefer singles parked in
_single-safe/ again.LER BillCleaver v59 · 23-Jul-26 — 🗃 One flat bill set (option). By default the complete bill set of a batch is split-bills at the run folder root plus the untouched singles in
_single-safe/ (e.g. 589 + 1,169 = 1,758). Tick 🗃 One flat bill set and the single/safe copies are written beside the split bills instead — every bill of the batch in one folder, ready to hand FileWhiz as-is. ✍ summaries and 💳 payment proof keep their own folders, the manifest reflects the flat paths, and the reconciliation still balances bill-for-bill. Also fixed via the reconciliation itself: a page that was both in a multipage set and moved to OK — FileWhiz next used to export twice (once in the OK queue, again in the set pass) — the OK copy now wins and the set pass skips it. And: reports folder in real Excel. The manifest and reconciliation now land in their own _reports/ folder inside each batch, written as genuine .xlsx workbooks (SheetJS; automatic CSV fallback if the library can't load) — no more loose CSVs among the bills.LER BillCleaver v58 · 23-Jul-26 — 📊 Handwritten summary → reconciled table, and kind-based routing. (a) Every piece row in the editor gains a 📊 button: Claude Vision transcribes a handwritten claim working (cash counts like RM100 × 3 = 300, expenses, balance) into a structured table, re-adds every section and checks it against the totals written on the paper — green when the figures agree, red when the client's adding (or the reading) is off. View it in a panel, ⬇ download as CSV (opens in Excel), and it saves with the page. (b) Routing: on export, pieces classified ✍ SUMMARY go to
_summaries/ (with their table CSV beside them) and 💳📱🏦 payment slips go to _payment-proof/ — out of the bill-OCR stream, but still dash-named, running-numbered and fully manifested so FileWhiz gets proper filenames for everything. (c) The Σ tally now counts real bills only — summary sheets and payment slips no longer distort the page total check.LER BillCleaver v57 · 23-Jul-26 — Page jump, ✍ handwritten %, and document-type tags. (a) The pager now has a type-in page box — key "7", Enter, and you're on page 7 of 13; both pagers, synced. (b) Claude Vision classifies each piece's document type: 🧾 receipt/bill, 📄 invoice, 📑 statement of account, ✍ claim summary (the handwritten cover with the circled ref), and — separated from bills as requested — payment evidence: 💳 card transaction slip, 📱 e-wallet screenshot (TnG/Grab), 🏦 bank transfer / bank-in slip. (c) Each piece also gets a ✍ handwritten-% estimate (a mostly-handwritten piece is flagged ✍ on the row — usually the claim summary rather than a bill). Types show as an emoji pill on the row (hover for the per-bill detail), and the manifest gains Doc Type (AI) and Handwritten % (AI) columns so FileWhiz can route payment slips and summaries differently from real bills. Cached — 0 tokens on re-runs.
LER BillCleaver v56 · 23-Jul-26 — ◯ Page ref, AI-read totals & the Σ tally check. Claude Vision now also reads, per page: the client's handwritten control total (RM441.97 in the margin), the circled page reference (㉙ → ◯29) and each bill's own total amount. AI readings show as amber "Σ? / ◯? … AI" pills and pre-fill the editor's fields (new ◯ Page ref box beside Page total) for one-glance confirm/correct; confirmed values show green. The Σ tally then checks the claim right at the cutting stage: if the AI-read bill amounts don't sum to the client's total, the row shows Σ⚠ sum ≠ total — a missed bill, a wrong crop or a client adding error, caught before FileWhiz. Everything carries forward: the manifest gains Page Ref, Bill Amount (AI) and Page Σ Check columns, so FileWhiz receives the reference, the per-bill amounts and the tally verdict with every file (authoritative extraction — supplier/payee/category — stays FileWhiz's job). All cached (0 tokens on re-runs) and saved with the run.
LER BillCleaver v55 · 23-Jul-26 — Filter clarity. (a) Every option in the Results filter now shows a live count — "Verified pool ✓ (128)", "Blank check ⚠ (0)" — so you see at a glance which pools are in use and which are empty for this run. (b) When "Hide verified ✓" is concealing rows (it's on by default so you can focus on remaining work), the summary line now says so explicitly: 🙈 N verified row(s) hidden — untick "Hide verified ✓" — no more wondering why All files doesn't show everything. (c) Move ticked to… now includes OK — FileWhiz next — the batch route into the numbered FileWhiz queue (verified pages only; unverified ticks are skipped with a warning), which previously existed only on each row's Section dropdown. (d) Header/table overflow fixed — when the results table is wider than the panel it now scrolls neatly inside the panel instead of spilling across the page; the Verify stamp wraps instead of stretching its column, and the action columns slimmed a touch.
LER BillCleaver v54 · 23-Jul-26 — 🗂 Timestamped batch folders. Each export now writes into its own
_BillCleaver-out/run-yymmdd.hhmmss/ (bills, _single-safe, _page-originals, _multipage-sets, _OK-FileWhiz-next, _evidence, manifest and reconciliation CSVs all inside) — so multiple batch runs never overwrite or mix with each other and each batch stays auditable as one unit. Cross-batch files deliberately stay at the _BillCleaver-out/ root: the running-no. register (so numbering still continues batch to batch), run JSONs and cache saves. Untick option 5 to get the old flat layout. ZIP fallback uses the same structure.LER BillCleaver v53 · 23-Jul-26 — Masthead date fixed. The version box's date was a fixed label from the first build and had gone stale (v50–v52 shipped after midnight MYT but still showed 22-Jul-26). It is now stamped automatically from the release time on every package, so the version box always tells the truth.
LER BillCleaver v52 · 23-Jul-26 — Running number registered in the output folder. Every export now writes a running-no. register beside the bills:
LER-RunningNo-Register.csv (Excel-openable — one row per batch with its date-time, from #, to #, bill files, total numbered files and the next #) and LER-RunningNo.json (machine-readable, same data). Before writing anything, an export reads the register first and continues from it if it's ahead of the local counter — so batch 2 numbers correctly on any PC, and FileWhiz can pick the sequence up directly from the JSON when a batch has no multibills and bypasses BillCleaver entirely (and write its own row back). Works identically in local-folder and Google Drive Cloud mode. Supabase remains the future home for a true multi-user counter once the shared layer is built. Plus: ⬇ Download all as ZIP — a fallback export for browsers that can't pick an output folder (Safari, phones): the identical pipeline (same dash names, running numbers, manifest, reconciliation and register) packed into a single LER-BillCleaver-out-…zip download with a progress bar.LER BillCleaver v51 · 23-Jul-26 — 🧾 Output reconciliation. After every export the app now reconciles what was written against every page of every original file: split bills (pieces + original copy), single/safe copies, set pages, OK-queue files — each page's expected document count vs the actual outputs. Pages that are intentionally zero (scrapped, blank-held, split-source, safe-copies-off) are explained as such; anything else that doesn't agree — a page skipped because its source wasn't re-attached, an uncropped multibill, a count mismatch — is flagged ⚠ mismatch and floats to the top. The verdict shows right in the export summary ("✓ all N pages reconcile" / "⚠ K don't"), view reconciliation opens the full table, the 🧾 Reconcile button re-opens it any time, and a
reconciliation-*.csv is saved beside the manifest as the audit record. Set pages are now also recorded in the manifest.LER BillCleaver v50 · 23-Jul-26 — Dash-only output names + 5-digit running number. Every written file name is now cleaned to dashes only — underscores are converted (including ones inherited from source filenames or from pieces cropped in older versions, so no more
-p1--MB… leftovers) — and ends with a 5-digit running number: …-MB1of3-00042.pdf. The counter continues automatically across batches and sessions (saved in this browser and inside the run JSON, so it follows the run to another PC), and the new Stage-4 control shows the next number, lets you continue from any value or ↺ Reset to 00001 when a new claim cycle starts. One number per bill (its PDF and PNG share it); sets, originals, OK-queue files and evidence snips are all numbered through the same sequence, and the manifest records the numbered names.LER BillCleaver v49 · 22-Jul-26 — Piece rotation got a sense of direction. 🪄 could tell a piece was sideways but not which way — you kept fixing 90 into 270 by hand. Now every 🪄 straighten also checks the reading direction by the text's margins (receipt text is left-aligned: upright text has a tight left edge and a ragged right), so sideways pieces choose 90 vs 270 automatically and clearly upside-down pieces get the 180 flip — printed receipts land upright first time. For handwriting and hard cases there's a new 🧠 AI orient button beside Straighten all: Claude Vision looks at each piece (tiny 420px snapshots, cheap) and returns the exact upright rotation; ↩ Undo reverts the whole pass.
LER BillCleaver v48 · 22-Jul-26 — 🧼 Erase overlaps + numbered piece list. (a) When two bills physically overlap in the scan (one receipt lying over another), tick 🧼 Erase overlaps in Free corners: wherever regions intersect, the piece on top keeps the area and it is wiped to clean white from every piece underneath — so the neighbour's corner no longer rides along in the export. Who's "on top" is exactly the ⤒ bring-to-front / ⤓ send-to-back order, the live previews show the wiped result immediately, Apply bakes the masks into the pieces, and every path uses them — Stage-4 exports, OK-FileWhiz queue, split-to-rows, thumbnails and right-click PNG. Saved with the run and per page. (b) The pieces list now shows the piece number inside its colour chip, matching the numbered tag on the page — no more guessing which row is which region when colours look alike.
LER BillCleaver v47 · 22-Jul-26 — Drag beyond the canvas — cut-off bills keep their shape. In Free corners, every handle (square corner, purple L, mid-edge, whole-region move, arrow-nudge) can now travel up to 30% past the page edge. When a bill is clipped by the scan — like a receipt running off the side — you no longer have to squash the region at the border and distort its aspect: keep the true rectangle, let it hang off the page, and the missing strip is exported as clean white (the perspective-corrected output already fills out-of-page area with white). The learning cache still stores page-clamped boxes so detection stays sane. Plus: scroll-within-scroll fixed. The editor now fits the whole page to your screen by default (both dimensions — tall receipts no longer force an inner scrollbar next to the page scrollbar), the page behind the editor is locked while it's open (one scroll context only), and new − / Fit / + zoom buttons in the header let you zoom to 400% for fine corner work — when zoomed, only the editor pane scrolls, and Fit brings the whole page back with one click. The layout also re-fits automatically when you rotate a tablet or resize the window.
LER BillCleaver v46 · 22-Jul-26 — Table de-cramped + mobile UX pass. The Verify and Edit columns got proper layout: action buttons stack full-width with even spacing (no more crumpled "Pass 2nd ✓ / recropped / Edit crops / 1️⃣" pile-ups), pills sit on their own line, cells centre vertically and hold a sensible minimum width. On phones/tablets: the crop canvas now uses the full screen width when the editor stacks, touch hit-targets are enlarged (corner/L/edge handles ~50% bigger grab zones on coarse pointers, chunkier buttons in the piece list, row strip, set organizer and right-click menu), preview heights adapt, and toolbar rows wrap with breathing room.
LER BillCleaver v45 · 22-Jul-26 — L crop tool: resize both edges of a corner together. Each region now shows a purple L bracket just inside every corner: drag it and the corner's vertical and horizontal lines move together — the area shrinks or extends like a normal crop tool, the skew angles are preserved and the opposite corner stays anchored, so a de-skewed region can be resized without disturbing its tilt. The square corners still do free 4-corner de-skew and the round mid-edge handles still push one side at a time; all three handle types are undoable and magnet-aware as before.
LER BillCleaver v44 · 22-Jul-26 — Editor opens in Free corners. Since de-skewing is the everyday mode, the crop editor now opens straight into Free corners (de-skew) — suggested regions load as adjustable quads immediately, no tab click first. Slices (grid) is unchanged and one click away for the neat row/column pages.
LER BillCleaver v43 · 22-Jul-26 — + Add region: draw it where you want it. The button no longer drops a box in the page centre — click + Add region and the cursor arms (crosshair): drag a rectangle directly over the bill and the new region lands exactly there, rubber-band preview included. A quick click (no drag) still drops a default-size box at that spot for corner-tuning; Esc or clicking the button again cancels; ↩ Undo removes a just-drawn region.
LER BillCleaver v42 · 22-Jul-26 — T text notes are properly movable. Dragging a note used to demand pixel-perfect aim (a size-10 note is ~11px tall on screen — miss it and you grabbed the crop box instead). Now every note has a generous grab zone (minimum 36×16px + 8px padding), shows a dashed outline so it reads as an object, and the cursor switches to move when you hover it. Plus a no-aim path: each note's row has a ⌖ button — click it, then click the new spot on the page and the note jumps there; drag to fine-tune. Notes still bake into every export exactly where you put them.
LER BillCleaver v41 · 22-Jul-26 — Rotation you can see, everywhere, instantly. The per-piece degree box now updates the live preview on every keystroke / spinner tick (no need to leave the field), and every rotated piece shows a green ⟳n° badge right on the page next to its number — in both Slices and Free corners — so there's never doubt whether a rotation is registered. ↩ Undo captures the angle as it was before you started editing the box. If a preview ever looks un-rotated, first check the version box says v41 — an older cached PWA build is the usual culprit (reopen the app once after updating; the service worker refreshes in the background).
LER BillCleaver v40 · 22-Jul-26 — Canva-style pieces: select in the list, move together, ⛓ group, right-click PNG. (a) Click a piece's row in the left panel to select it (Ctrl-click for multi) — the row and the piece highlight, and the selected piece catches your clicks first on the page, even when it sits behind another region, so no more fishing for the right box. (b) Move like Canva: dragging inside any selected piece moves the whole selection together; arrow keys nudge the selection precisely (Shift = bigger steps); Esc deselects. (c) ⛓ Group / Ungroup: group selected pieces and they move as one from then on — each shows a ⛓G badge on the page and in the list; grouping, moving and all selections are covered by ↩ Undo. (d) Right-click a piece (on the page or its row) to ⬇ export it as PNG on the spot — page menu also offers "Export selected (n)" for a batch; instant snips for a query email without running the full Stage-4 export.
LER BillCleaver v39 · 22-Jul-26 — ↩ Undo, 🧲 straight-line magnet & bigger piece previews (Free corners). (a) ↩ Undo (button + Ctrl-Z) steps back through every layout change in Free corners — corner/edge drags, moving a region, + Add region, ✕ delete, ⤒ bring-to-front / ⤓ send-to-back, per-piece rotations and 🪄 straighten, 🧲 snap and Reset — up to 40 steps per page, so an accidental touch is one click to recover. (Deleting a piece now also keeps the other pieces' rotations correctly aligned.) (b) Straight-line magnet: while dragging a corner, any edge that comes within ~1° of vertical/horizontal clicks exactly straight; and an edge that is almost straight (≤2.5° off) is flagged with an amber dashed overlay so you can spot a slightly-bent line at a glance — nudge its corner and the magnet finishes it. Genuinely tilted bills (>1°… you de-skewing on purpose) are untouched. (c) Piece previews doubled (64px) in the pieces list and now click to enlarge full-screen — check a crop properly before Apply.
LER BillCleaver v38 · 22-Jul-26 — Fix: Free corners now works on the first click. The editor always reopens in Slices mode, but the mode toggle's radio kept your previous session's choice — so if you'd used Free corners before, its radio was still "checked" and your first click on it fired nothing (you had to click Slices first, then Free corners). The toggle now re-syncs whenever the editor opens or the mode changes, and clicking either label always applies its mode directly. One click, either way, every time.
LER BillCleaver v37 · 22-Jul-26 — 📎 Research evidence on the ⚑ LTT remark. For unclear bills you had to research (the HK receipt where Google/Gemini confirmed HKD, a vendor lookup, a duplicate check), the remark editor now takes image evidence: click 📎 Attach image(s), or simply paste a screenshot (Ctrl+V) while the remark window is open — snips are downscaled (≤1400px JPEG) so they stay light. Thumbnails show in the editor (✕ to remove, click to enlarge in a full-screen viewer); the row gains a 📎n pill (click = view — also visible to clients in Client view, so the proof is one tap away when presenting). Evidence travels with the page — run JSON, autosave, cloud state — and export files it to
_evidence/ as {file}-p{n}-evidence-{i} (PDF-first like everything else) with manifest rows tying each snip back to its bill, country, currency and flags.LER BillCleaver v36 · 22-Jul-26 — Tick by page & the set organizer. (a) Ticking split in two: Tick this page selects only the rows on the pagination page you're viewing (e.g. 100 at a time — work through a huge batch page by page: tick → verify/straighten/move → Next › → tick again), while Tick ALL matching selects every row that passes the current filter across all pages; both report how many they ticked. (b) ⧉ Organize set: every row of a multipage set now has an ⧉ organize button that opens the whole set in one panel — pages listed in PDF order with previews, ⤒ first / ⬆⬇ move / ⤓ last / ✕ remove — so after merging you can re-sequence the combined PDF exactly (the order shown IS the export order of
SETn-pXofY files and the combined PDF). Changes save instantly to the run/autosave and the row pills follow live.LER BillCleaver v35 · 22-Jul-26 — 🪄 Straighten & rotate from the table — no editor needed. Every row now carries its own page-rotation strip under the action button: 🪄 one-click auto-straighten (reads the text lines, de-skews and 90°-turns the whole page), ⟲90 / 90⟳ / 180, and an exact-degree box (e.g.
2.5) — the common "just slightly crooked" scan never needs Edit crops opened. The row preview updates instantly, the angle saves with the run and export applies it as before. Batch: tick rows → 🪄 Straighten ticked walks them with a progress bar and reports how many actually needed turning (already-straight pages are left untouched). Pages with applied crop boxes are protected — their strip is hidden and you're pointed into the editor's 🪄/rotation instead, so boxes always stay aligned with the image; unedited multibill pages get their suggested boxes re-detected on the turned image. Every 🪄 adjustment is logged (angle + timestamp) in the page history.LER BillCleaver v34 · 22-Jul-26 — 🪄 Auto-straighten by piece. Each piece row gains its own 🪄: the text-line analysis runs on that piece's content alone, setting its individual rotation (90° turn + fine skew) — so two bills on one page can each straighten to their own angle. 🪄 Straighten all beside the Pieces header does every piece in one go, with the live previews updating so you verify at a glance; 180° ambiguity remains yours to confirm (↻↻). Orientation detection upgraded to peak-counting (text = many aligned line-peaks) so narrow pieces no longer fool it. Also new: ⤒ bring-to-front / ⤓ send-to-back per piece — when regions overlap and clicks keep grabbing the wrong box, push the finished one behind; the front piece always catches clicks first. And for false alarms: 1️⃣ Not multibill on every multibill row marks it single/safe in one click — no more opening the editor just to merge to 1 section — plus batch 1️⃣ Ticked → not multibill in the toolbar; each click is learned as a human-verified "count 1" in the Vision cache (and the Drive Brain), so that page stays single on every future re-detect, on any machine. Wrong click? "Split anyway" reopens the editor.
LER BillCleaver v33 · 22-Jul-26 — Precision handles, text-based straightening, piece previews. (a) Round mid-edge handles on every Free-corners region: drag one to push that whole side out/in — wider/taller only, the side stays parallel, skew untouched; square corners keep full aspect+skew freedom. (b) 🪄 Auto-straighten in the Rotation block reads the text and number lines themselves (shear-projection alignment): detects fine skew to 0.35° and suggests a 90° turn when lines run vertically, then applies it (180° ambiguity flagged — content alone can't tell upside-down without reading words). (c) Per-piece rotation now has ↺ counter-clockwise and ↻ clockwise buttons plus a live preview thumbnail per piece showing exactly how it will export with rotation applied. (d) T Add text: click, then click the page to place a note (Poppins, size 10 default; black/red/blue; drag to move) — notes are baked into every export of that page and saved with the run.
LER BillCleaver v32 · 22-Jul-26 — Output folder renamed for consistency: exports, manifests, run JSONs and cache saves now write to
_BillCleaver-out/ (previously _MultiBill-out/). Subfolders unchanged (_single-safe, _OK-FileWhiz-next, _page-originals, _multipage-sets). Existing _MultiBill-out folders from earlier runs are untouched — new exports simply use the new name.LER BillCleaver v31 · 22-Jul-26 — 🧠 The Brain — learning follows you to every client. On Connect, the app now finds (or creates) a
LER-BillCleaver-Brain folder in your own Drive and loads brain.json: the complete cross-client learning — every human-verified page from every client plus your 🎯 edge-tuning stats. Every new correction pushes back up (~15s). So a brand-new client folder on a brand-new device starts with everything you have ever taught the app; per-client cache files remain as before. (For several staff on different Google accounts, a shared central store — the Supabase layer — is the eventual answer.)LER BillCleaver v30 · 22-Jul-26 — 🎯 Cross-client edge tuning. The app now distills the pattern of your corrections, not just the pages: every Apply records how far you moved each suggested edge (top/bottom/left/right, page fractions, last 400 samples). Once 25+ corrections exist per edge, the median habitual adjustment (capped ±2% of the page) is automatically applied to every future suggestion — on any client's bills, any folder. If you always pull thermal-receipt bottoms down a little, the app starts doing it first. The tuning data rides with the Vision cache (Drive auto-sync + Save/Load buttons) so it follows you to every device; the cache line shows "🎯 N corrections (edge-tuning active)".
LER BillCleaver v29 · 22-Jul-26 — 📚 Learns from every correction. When you Apply crops, your final boxes are written back into the Vision cache as human-verified — ranked above every AI model, so that page detects perfectly forever, is never re-sent to the API, is never re-snapped, and (in Cloud mode) the learning syncs firm-wide through Drive. Rows detected from your own corrections show ✓ your boxes; the cache counter reports "📚 N human-verified". The Vision prompt also gains explicit boundary discipline (never cut the total line / footer / header; include handwritten annotations). Your saved run JSONs meanwhile keep accumulating detected-vs-corrected pairs — the training dataset for a future custom local model.
LER BillCleaver v28 · 22-Jul-26 — 🧲 Magnetic boundaries. Detected boxes (AI and local) are now auto-refined against the actual pixels: each edge expands until the receipt's content truly ends (fixing cut-off bottoms) and trims loose margins, with growth capped at the midpoint toward neighbouring receipts so boxes never swallow each other; small internal gaps are tolerated so faint receipts stay whole. Toggle in Stage 2 (on by default). In the editor's Free-corners mode a new 🧲 Snap edges to content button refines the current regions on demand — skewed quads you placed by hand are respected and left untouched.
LER BillCleaver v27 · 22-Jul-26 — 👁 Client view. One tap on the masthead's Client view button turns the app into a clean, read-only presentation for tablets: Stages 1/2/4 and every editing control disappear (no checkboxes, verify buttons, section dropdowns, edit/split buttons), leaving the summary tiles, filter & sort, pager, and rows showing previews, LTT-remark flags in full text, country/currency, Σ totals and verification status pills. Tap any preview to show the bill full-screen (renders fresh from the scan; tap to close) — pieces in a strip open individually. Exit needs a double-tap so a stray client tap can't leave the mode. Filters still work for the walkthrough: ⚑ queries, 🌏 non-Malaysia, Verified pool.
LER BillCleaver v26 · 22-Jul-26 — ⇢ Split to rows. On any edited multibill row, the preview strip now offers ⇢ Split to rows: each separated bill becomes its own standalone row — individually rotatable (open it and use the rotation buttons; e.g. turn bill 2 by 90° while bill 1 stays), individually verifiable, flaggable, country/currency-taggable and OK-numberable. New rows inherit the page's flags/country, carry a "◧ from <source>" pill and a split-from log entry; the source page parks as Split → rows (source) (excluded from export so nothing doubles). Bill rows re-render from the original scan on demand, survive save/restore, and export through the normal single-bill path under their piece name. (Reminder: without splitting, each piece in the editor list also has its own ⟳ + degree box.)
LER BillCleaver v25 · 22-Jul-26 — See the split, export per page. After Apply, the row now shows a preview strip of each separated bill (blue-bordered mini-images; click to re-edit) so the result of a crop is visible immediately — previously the pieces were invisible until the Stage-4 batch export, which read as "nothing happened". New Apply + export page 💾 button in the editor writes that one page's split bills to
_BillCleaver-out/ straight away for immediate onward processing, without waiting for the batch export. Piece previews restore automatically after reload/restore, and are excluded from autosave (kept in full run JSONs).LER BillCleaver v24 · 22-Jul-26 — Previews return after restore. Restoring an autosave (or loading a run JSON) then picking the files now rebuilds all row previews automatically in the background — 3 lanes, progress in the status line, list refreshing as thumbnails arrive; no more "no preview" placeholders. A new Detect cancels the rebuild cleanly.
LER BillCleaver v23 · 22-Jul-26 — 📸 Snip header → search. New shop-lookup tool in the crop editor: click Snip header → search, drag a box over the merchant banner (e.g. a 賞茶 receipt header), and the snippet is copied to your clipboard for one-paste Google Lens verification. With your Claude key, 🤖 AI read → Google has Claude read the printed name/address, give a country verdict with its clue (e.g. "traditional Chinese + HK$ + Wong Chuk Hang address → Hong Kong"), open a ready Google search for the shop, and set the page's country AND claim currency in one click. Works from any fragment — header, payment footer (HKT付款/PINME/Octopus/Alipay/WeChat Pay) or phone-number format — because the goal is the correct claim currency: main detection now also suggests currency, the ⚑ editor gains a 💱 Claim-currency dropdown, rows show 🌏 Hong Kong · HKD ?, and the manifest gains a Currency column.
LER BillCleaver v22 · 22-Jul-26 — Files hub, tougher autosave, PDF-first exports, dash naming, 🌏 country check. Claude Vision now also judges each page's likely country of origin (language/currency/tax clues); non-Malaysian suspects show a 🌏 Hong Kong ? pill, the ⚑ editor gains a country dropdown (Mainland China / Hong Kong / Singapore / Vietnam / Indonesia / Thailand / Taiwan / Japan / Korea / Other) to confirm, "🌏 Country ticked…" batch-sets it, a Non-Malaysia filter collects them and the manifest gains a Country column. Vision-cache buttons regrouped on one row. (a) New 📁 Files & state hub at the top of Stage 1 — Choose files/folder, Set output, Load/Save run JSON, ↺ Restore autosave and Load/Save Vision cache all in one strip, with a live save indicator (● saving… / ✓ autosaved / ☁ synced), no more scrolling between stages. (b) Autosave hardened: flushes instantly when the tab hides or closes (nothing pending is ever lost), keeps a previous generation as corruption fallback, and cloud sync tightened to ~6s. (c) PDF is now the default export for every output — split bills, single/safe copies, OK-FileWhiz queue, page originals and set pages (PNG optional; auto-fallback to PNG if the PDF library can't load) — better for accounting-system attachments, previews and later Supabase storage. (d) Export names use dashes:
{original}-p{page}-MB{n}of{m}.pdf, SETn-pXofY-…, 0007-…, …-original-RM141.80.LER BillCleaver v21 · 22-Jul-26 — ⚑ LTT remarks, modern selection & mobile UX. (a) New ⚑ column: every row can carry LTT standard issue flags — 19 built-in reasons (client to clarify purpose; date / payee / amount not readable; currency uncertain; reference no. not obtained; potential duplicate; unclear handwriting; faded thermal print; cut-off scan; blur; not-a-bill; personal expense; missing payment proof; amount mismatch; tax-invoice details missing; foreign language; wrong entity; outside claim period) plus a free-text note. Tick several in the ⚑ editor, batch-apply one flag to ticked rows via "⚑ Flag ticked as…", filter Has LTT remark, sort by the ⚑ column — flags save with run JSON/autosave and appear as an LTT Remark column in the manifest CSV, so the client-query list writes itself. (b) Modern selection: ticked rows highlight in LTT blue with an accent bar; larger, accent-coloured checkboxes. (c) Mobile-optimised: responsive layout, touch-sized buttons, secondary columns folded away on small screens, full-screen crop editor with controls stacked above the image, and the editor now uses pointer events — crops drag with finger or stylus on tablets/phones.
LER BillCleaver v20 · 22-Jul-26 — 📲 PWA — installable app. BillCleaver now ships as a Progressive Web App: upload the
billcleaver/ folder (index.html + manifest + service worker + LTT icons) to ltt-cfo.my, open it once in Chrome/Edge, and an Install app button appears in the masthead (also via the browser's install icon in the address bar; on Android, "Add to Home screen"). Installed, it runs in its own window with the LTT icon, and the app shell + libraries are cached for offline — local-mode splitting works without internet after the first load (Claude Vision & Drive naturally need to be online). Updates flow automatically: the worker fetches network-first, so re-uploading a new index.html reaches every installed copy on next open.LER BillCleaver v19 · 22-Jul-26 — No more scroll-within-scroll. The results table's inner scrollbar is gone: rows flow with the page, the column header stays sticky at the top while you scroll, and the list is paginated (100 rows/page default, 50–500 or All, pager at top and bottom plus a floating ↑ Top button) — large batches also render much faster. Filters/sorting apply across all matching rows and reset to page 1 when changed; Tick all matching still ticks every matching row across pages, not just the visible page.
LER BillCleaver v18 · 22-Jul-26 — Cloud sync now covers everything. In Cloud mode the Vision cache auto-syncs to
BillCleaver-vision-cache.json in the Drive folder alongside the state file, and loading that folder on any device auto-merges it (model-aware, Opus reads never downgraded) — so Claude never re-reads a page the firm has already paid for, on any machine. The cloud state file now also carries the duplicate registry, merged on restore. Supabase remains only for true simultaneous multi-user ticking.LER BillCleaver v17 · 22-Jul-26 — ☁ Cloud mode: Google Drive. Host this file on ltt-cfo.my, click Connect Google Drive (Client ID pre-filled from the LER-BillCleaver Google Cloud project, Internal to lttcfo.com), paste a claim folder's Drive link and Load folder — scans stream straight from Drive with no local files, so you can detect, edit crops and tick verifications online from any device. Ticks auto-sync to
BillCleaver-cloud-autosave.json inside that Drive folder (~12s after each change); loading the folder on another device offers ↺ Restore of the exact session. Exports, run JSONs and manifests write back into the same Drive folder (_BillCleaver-out/ etc.). Local mode is untouched; sign-in must run from the hosted https address (Google blocks file:// origins).LER BillCleaver v16 · 22-Jul-26 — Working-queue filters & sortable headers. New Hide verified ✓ tick (on by default) makes every filter a true to-do list — "Single / safe only" (and all others) now exclude pages you've already passed, so the list shrinks as you work; untick to see everything, and the Verified pool / OK FileWhiz filters still show their contents. Column headers (File · Pg · Bills · Category · Status · Section · Verify) are now click-to-sort with ▲▼ toggle — e.g. sort Bills descending to review the heaviest multibills first, or Verify to order by pass time.
LER BillCleaver v15 · 22-Jul-26 — Verification ticks are never lost. Save run (JSON) already stored every Pass ✓ with its timestamp and log; now the app additionally autosaves the whole session (thumbnail-free, so it fits in browser storage) about a second after every verify, section move, crop apply, rotation, grouping or OK-numbering. If the tab crashes or closes, reopening the app offers ↺ Restore autosave (Stage 4) with the exact saved time — all ticks, sections, sets and numbers return; just re-pick the same files to re-attach images (rows show a "no preview" placeholder until then). Manual Save run remains the portable, shareable copy.
LER BillCleaver v14 · 22-Jul-26 — OK — FileWhiz next. New final section for pages fully done here and ready for the next app in the pipeline. Only verification-passed pages can enter (unverified ticks are skipped with a warning), and each page receives a controlled number assigned in order of its verification timestamp (sticky once given, counter persists across runs). Rows show OK #0007; export writes these — split bills and singles alike, rotations applied — into
_OK-FileWhiz-next/ named 0007-<file>, so FileWhiz receives a clean, ordered, numbered queue. The manifest gains an OK # column. "Move ticked to…" still routes anything else to further processing — recrop queue, attention, blank check.LER BillCleaver v13 · 22-Jul-26 — Rotation, with or without crop. New Rotation block in the editor: ⟲90 / 180 / 90⟳ buttons plus an arbitrary-degree input (e.g.
2.5) for skewed scans. The angle is saved instantly — a page that only needs turning can be rotated and closed, no crop required; export applies it to split bills, single/safe copies, set pages and the original-page copy alike, and the table preview turns with it. Rotating re-runs the crop suggestions on the turned image. Each piece in the list also gets its own ⟳ (90° cycle) and degree box for rotation after crop — for the one sideways receipt on an otherwise upright page.LER BillCleaver v12 · 22-Jul-26 — Handwritten batch totals stay traceable. When one page holds several bills plus a handwritten control total in the margin (e.g. 4 receipts, Total = RM141.80): record it in the editor's new Page total (RM) field — it shows on the row as Σ RM141.80, saves with the run JSON, and export now writes (a) the uncropped original page to
_page-originals/ (filename carries the total, e.g. …__original_RM141.80.png) so the handwriting travels with the 4 split bills, and (b) a manifest CSV linking every output bill back to its source file, page, piece n of m, page total, set, section and verification stamp. The split bills themselves stay grouped by their shared …__MB1of4…MB4of4 naming.LER BillCleaver v11 · 22-Jul-26 — Sections & merge for non-standard layouts. Slices mode now works section-by-section: split the page into horizontal sections (thick dashed lines, draggable; ✂ Split / Merge ↓ buttons), and give each section its own column count — e.g. two receipts side-by-side on top, one wide bill below. Click any cell to make its section active; click cells to select and ⧉ Merge them when one bill spans multiple cells (unmerge from the piece list ✕). Every numbered region still exports as one bill, and the sections rebuild live as you drag.
LER BillCleaver v10 · 22-Jul-26 — Visible feedback everywhere. Every action now pops a toast confirmation at the bottom of the screen — Save/Load Vision cache, Save/Load run JSON, verify passes, section moves, exports, errors — so you always get a response no matter which stage you're scrolled to (previously feedback only showed in the small Stage-2 status line). Green ✓ success with counts & filenames, amber ⚠ next-step guidance, red ✕ errors; click a toast to dismiss, auto-fades after ~5s.
LER BillCleaver v9 · 22-Jul-26 — Sections: blank check, movable pools & multipage sets. (a) Blank page checker: pages with near-zero ink land in a Blank check ⚠ section (new tile + filter) for one manual round before scrapping — change a row's Section to Scrapped to confirm, or recrop/move it back to review to rescue; scrapped & unconfirmed-blank pages are excluded from export (export tells you how many were held back). (b) Move between sections: every row has a Section dropdown (In review / Recrop queue / Blank check / Scrapped / Needs attention), plus batch "Move ticked to…"; moving to recrop/attention/scrapped clears verification with a logged reason. (c) Multipage bills: tick the pages of one bill in scan order and ⧉ Group as multipage set — rows show Set N · p1ofM with ⬆⬇ to fix the previous/next sequence and ✕ to remove; export writes sets to
_multipage-sets/ with sequence names and a combined multi-page PDF per set. All sections, sets, ink scores and move history save/load with the run JSON.LER BillCleaver v8 · 22-Jul-26 — Manual verification QC pool. New Verify column in Stage 3: click Pass ✓ per row, or tick rows and ✓ Verify ticked for a batch pass — each pass is timestamped
yymmdd.hhmmss (your PC clock, MYT). Verified pages move into the Verified pool filter so you focus only on problem pages; recropping a verified page automatically pulls it back into a 2nd-pass verify queue (button becomes Pass 2nd ✓). Undo with ↺. Every pass / undo / recrop-reset is kept in a per-page verification log, saved and restored with the run JSON. New "Verified ✓" tile and filters: Needs verification · Recropped 2nd-pass · Verified pool.LER BillCleaver v7 · 22-Jul-26 — Renamed. The app is now LER BillCleaver — "Multibills caught, singles pass safe." Run JSONs and Vision caches now save as
LERBillCleaver-run-*.json / LERBillCleaver-vcache-*.json; files saved under the old MultiBill name still load fine. App file naming convention: LER-BillCleaver-App.HTML-v<N>-<yymmdd.hhmmss>.html, timestamped in Malaysia time (UTC+8).LER MultiBill v6 · 22-Jul-26 — Multilane Vision. Claude calls now run through a parallel worker pool (Parallel requests setting in Stage 2, default 5 — the BinderReaper v9 standard), so big batches drop from hours to minutes. Rate-limit safe: 429/5xx responses retry up to 4× with exponential backoff, and the Vision cache is flushed to disk every 25 files so a stop or crash loses nothing. Live status shows lanes and fresh/cached counts.
LER MultiBill v5 · 22-Jul-26 — Vision by default + token-saving cache. Claude Vision is now on by default with Opus 4.8 preselected (model choice remembered). New Vision cache on the BinderReaper AI-cache standard: every page Claude reads is cached by file signature, so re-running Detect on the same files makes 0 API calls; the status line reports "N fresh / M from cache". Model-aware: an Opus read is never overwritten by a weaker model. Save / Load / Clear cache buttons make it portable across machines (or a backup next to the run JSON); "Ignore cache" forces a fresh AI pass when you want one.
LER MultiBill v4 · 22-Jul-26 — (a) Blank-image bug fixed for huge batches. Full-page images are no longer held in memory for the whole run — Chrome silently blanks canvases once its memory cap is hit (the empty crop editor you saw on a 1,296-file run). Pages now render on demand when you open the editor or export, and are freed straight after; batch size is now effectively unlimited. (b) Claude Vision now draws the crop areas. With the Stage-1 tick + API key, Claude returns each bill's actual bounding box and those become the suggested crops (badge: AI boxes) — much less manual dragging; local engine remains the free fallback. (c) Export shows progress, skips (and reports) pages whose source file wasn't re-picked instead of failing.
LER MultiBill v3 · 22-Jul-26 — Smarter resume. Load run now rebuilds the whole table instantly from the JSON — counts, categories, crop boxes and page previews — so you see everything before touching the files. Re-attaching the page images now happens automatically when you click “Choose files” (matched by filename, so it works even if the file's date changed); you never press “Detect bills” to resume (that re-scans and discards your saved crops). Editing or exporting a not-yet-re-attached page now gently tells you to pick the files first, instead of silently doing nothing.
LER MultiBill v2 · 22-Jul-26 — (a) New detection engine: a global whitespace-projection XY-grid tuned on real Khuan Loke claim scans — classification jumped from 3/10 to 8/10 on the sample, and it now catches side-by-side pairs and bill-book grids that v1 missed. (b) Sensitivity control (Conservative / Balanced / Aggressive), biased toward flagging so multibills aren't mislabelled as safe. (c) Free-corners de-skew in the editor: drag each of the 4 corners for any angle/aspect; on export each region is perspective-corrected into an upright rectangle (CamScanner-style). (d) Larger page previews in the results table.
LER MultiBill v1 · 22-Jul-26 — Focused split-out of BinderReaper's multibill stage. (1) Local XY-cut detection counts bills per page. (2) Per-file bill count + multibill/single split. (3) Single-bill files parked in a safe category, never split. (4) CamScanner editor: suggested crops pre-loaded, edited one by one (slices grid or free boxes, drag/add/delete/rename). (5) Writes processed images to a folder with Save/Load run JSON to resume at any stage. (6) Claude API & Supabase both optional, not required — see the note in Stage 1. (7) Unique tracking via a persistent
lmb_registry, BinderReaper-standard.Local-only. Uses the File System Access API (Chrome / Edge), pdf.js, UTIF and jsPDF from cdnjs.