Build LogiOS
#11
2026-06-235 min read

The 4-bit LLM hallucinated my Halifax statement. A band-based parser fixed it.

bb finance's Phase H spike wired a 4-bit quantised Llama 3.2 1B as the primary PDF extraction route. On real Halifax statements it hallucinated at a destructive rate — page 3 has 34 transactions; the model returned something else. PF-002 disabled the LLM path and replaced it with a deterministic band-based parser that lands 54 of 54.

Read post
iOSSwift
#12
2026-06-225 min read

Four quest types. None of them read your transactions.

An iOS budget app shipped a gamification layer backed by a hardcoded mock array. Phase C replaced it with QuestGenerator — a pure function that derives up to four quests per day from real transaction history. What changed wasn’t the number of quests. It was whether the quests knew anything about the user.

Read post
iOSSwift
#13
2026-06-216 min read

accessibilityReduceMotion should be a contract. Phase D made it one.

Phase D of an iOS budget app Cursed Energy feature adds five animated layers across sigil, energy, claim, level-up, and streak milestone surfaces. Every one checks accessibilityReduceMotion before firing — a hard gate, not a hint. The uniformity was a rule established on the first addition and held through to the fifth.

Read post
iOSSwiftUI
#14
2026-06-215 min read

The Accounts calendar strip passed every preview check. On my test iPhone, it answered the wrong question.

The Phase K Accounts screen shipped with a horizontally-scrollable calendar strip. Device QA on my test iPhone showed it was answering the wrong question, so mid-design I deepened Phase O to a three-level navigation flow: inline calendar, full-screen month view, day mode. SwiftUI preview had nothing to say about any of it — the back-nav regression that followed only surfaced under a real thumb.

Read post
Build LogiOS
#15
2026-06-206 min read

Five sprints inside one PR: what an iOS budget app's side-branch pattern reveals about tracking

PR #10 on an iOS budget app landed five complete features in a single merge. Each devlog entry reads as a self-contained sprint brief with its own type, its own boundary, its own completion signal. PR-level granularity and feature-level granularity are not the same number.

Read post