iOSSwift
#206
2026-06-196 min read

Cursed Energy Phase C: wiring an iOS budget app's quest system to real transaction history

The an iOS budget app gamification layer had quest cards, a claim button, and a streak counter. None of it read from actual spending. Replacing a hardcoded array with a transaction-aware QuestGenerator turned decorative chrome into a feedback loop that surfaces real patterns.

Read post→
Build LogiOS
#207
2026-06-195 min read

Device QA found three regressions. The simulator had approved them all.

Round-2 device QA on bb finance flagged a navigation stack popping two levels instead of one, ProMotion locked at 60Hz on a 120Hz panel, and category rules over-reaching on shared word fragments. None of them showed in the simulator.

Read post→
SEOBuild Log
#208
2026-06-195 min read

Eight calculators were cannibalising each other. One prefix strip fixed it in 72 hours.

A site-wide SEO audit against ukcalculator.uk surfaced 8 routes competing with themselves for the same search intent. The fix — strip the NN- prefix, issue 308 redirects across 23 routes, repoint every internal cross-link — had to land as a single atomic operation or it would introduce crawl noise between deployments. Three days later, Google had started indexing.

Read post→
Build LogDVLAW
#209
2026-06-196 min read

Five slots, twenty percent: the substitute pool had no editorial policy

Five scheduled publishing slots, four expirations, and a breach chain that exhausted six candidates in three seconds. The scheduler fired on time every run. The substitute pool was offering articles the drafter’s citation rules were going to refuse.

Read post→
Build LogiOS
#210
2026-06-195 min read

GOOGLE plus CLOUD matched SoundCloud. Why the fuzzy categoriser had to go.

Phase Q's fuzzy categoriser propagated category matches silently. Device QA on Phase R's part-based builder immediately surfaced an ANY-match failure: GOOGLE plus CLOUD matched SoundCloud. Version two adds exclusions and per-row overrides; the difference is that the user can now see what the matcher is doing.

Read post→