Repeat
Three weeks, mostly App Store paperwork. Confirmed Epiphany already supported Interactive Brokers, fixed a Lexly build bug breaking course taps, and restyled the portfolio site with a warmer serif-and-sans look. Talli’s widget was drifting out of sync with the app version, fixed to read it from build settings instead of a hardcoded number.
The big renames landed: Books to Spine to Uprighty, Brief to Casewright to Litigate, Grapher to Curvely, Echo to Voxprint (Apple rejected “Echo” as too generic). Un-paywalled all of Lexly’s courses since the Stripe gate never worked. Journal and Inkpress finally split into what they should always have been, a blog and a separate RSS reader, connected only in that Inkpress can subscribe to the blog’s feed like any other.
Closed out account-deletion support everywhere it was missing, moved twelve apps off Vercel onto Cloudflare Pages, and unified several apps’ iOS and Mac builds under single App Store listings. Found and fixed a real security bug: Litigate’s live site was serving real court documents to anyone, unauthenticated, behind a CSS overlay that never actually protected anything. Moved it behind a proper Supabase auth gate. Took down an old personal page that had been ranking on Google.
Uprighty shipped v1.0 with all book summaries complete. Two RCMP ATIP letters came back on the 2021 case confirming no body-worn camera footage existed and the 911 tape was destroyed under retention policy; filed into Litigate, follow-up request queued. Rebuilt the Feng Shui reading app from scratch after the original was lost. Finished the BCGD merge doc, nearly everything from the original site was already shipped, just needed a track repair page.
Closed the stretch with i18n work on Talli and Quotable, a git hygiene pass that pushed six repos’ worth of deferred commits, and a batch of App Store rejections that turned out to be stale thumbnails and orphaned IAP references rather than real bugs.
Spent tonight finally killing the Times Square game’s colonist autoplay bug. The root cause wasn’t what I thought — it wasn’t just the deleted directive engine, but two other systems that had been flying under the radar: the game startup was hardcoding two colonists to gatherer jobs with zero player input, and the job system was re-assigning fresh tasks forever once any job was set, regardless of how the player got it there. Removed both, plus cleaned out a massive dead autopilot block in the web version that had been accumulating junk for months (survivalActions, infrastructureActions, auto-quest generation). Deployed to production after native verification.
Sunday (2026-08-02)
Wrapped up the autoplay fix properly—turns out the directive-engine fix alone wasn’t enough, and I’d left two other systems that were also hardcoding colonist jobs and auto-perpetuating tasks. Got that deployed and confirmed working. Refreshed Nimble’s landing page to match the Maybulb design system with a splash screen and fixed the header. Redesigned Lexly’s profile panel to Duolingo’s style, bigger avatar and icon grid. Talli’s Bennies tracker now lives in the Status tab instead of as its own panel. BCGD macOS build is attached to ASC. Fixed a stale CI regression test in Talli that had gone out of sync with the actual profile schema—the parser had grown three new benefit types but the guard test was still checking for the original four, which broke the GitHub Actions pipeline. Updated the assertions and verified the full test suite passes.
Fixed Sparkjar’s iOS and Mac resubmission: the build had been rejected because the review submission was still pointing to a leftover deleted in-app purchase item that no longer existed. Cancelled the stale submission and created a fresh review submission using the existing valid build, then resubmitted. Both iOS and Mac are back to WAITING_FOR_REVIEW now.
Monday (2026-08-03)
Audited half the app portfolio to sync roadmaps with reality—found that Lexly’s masterclass reader and Sparkjar’s iOS submission switch were already done weeks ago but never checked off. Consolidated Talli and the portfolio to pull blue accents from a shared design system instead of hardcoding them. Built an architecture-svg skill for documenting app structure (drew diagrams for Fengshui and others), scaffolded Facebook OAuth in Epiphany following the Google pattern, and updated a few stale notes about signing certificates and DNS verification scopes. Added Daring Fireball to Newsline’s feeds, refreshed Lexly’s avatar picker to SwiftUI with bottom navigation, and regenerated Sparkjar’s app icons.
Fixed Epiphany’s Stripe setup—discovered the production API key got mangled during an earlier debug session, so the webhook had been silently failing. Straightened that out, and switched the paid tier from a stale $9.99/month subscription to a simple $1 one-time purchase (People search and Daily Brief features now gated behind that).
Attempted to roll out Stripe + Apple/Facebook/Google OAuth across all the other shipped apps, but hit two hard blockers: most apps have no premium feature defined, so there’s nothing to gate Stripe behind; and social auth registration requires interactive developer-console work (Google Cloud, Meta, Apple Developer) that’s not something I can provision. Scoped it down to a roadmap note documenting the audit and blockers instead of shipping half-built infrastructure. Turned out healstack and sparkjar did have workable gates once decided—shipped Healstack’s $1 one-time CSV export unlock and Sparkjar’s “Spark Pro” unlimited-posts-and-pinning tier. Caught a stuck auto-deploy on sparkjar that had silently kept the old version live even though the code was pushed; had to manually run vercel --prod to get it out. Worth investigating that git-push integration for that project. Finished the Stripe rollout by shipping Talli’s payment-history unlock (YTD total + bar chart in the home view, free tier keeps monthly amount). Found an interesting gotcha along the way: Talli’s Express monolith had the raw-body-eating global json() middleware mounted early, which would’ve sabotaged Stripe webhook signature verification—had to mount the webhook handler with raw() before that line, order matters. Added Google/Apple/Facebook sign-in buttons to Healstack’s auth form too, wired but waiting on actual provider registrations. Tried to bang out the OAuth provider registrations via browser automation but Chrome extension died mid-session, so shelved it for later.
Finally tackled Quotable’s missing poster art — the iTunes Search API source had died, so I signed up for a TMDB developer account, got the API key, and backfilled artwork for 191 of the 193 quote entries. Only Game of Thrones and Star Trek TV are still missing images (minor follow-up), but the game looks fully illustrated now.
Pushed Curvely’s privacy policy page and App Store metadata to unblock its first submission.
Ended the night killing a small daily annoyance. Every morning I open a shell and re-authenticate the App Store Connect web session, typing my Apple password and a two-factor code. Turns out the session is usually still alive, so half those logins were for nothing, and the password was already sitting in my keychain the whole time. Now it is one command that checks first and only asks for the code if it actually expired. The code itself I still have to type, since Apple sends it to the device as a popup rather than a text I could read.
Apps
Uprighty 1.0 live. Litigate’s leak closed. Lexly and Sparkjar unblocked. Voxprint renamed and resubmitted. Wiretext, Wordroot, and Nimble got first App Store builds. Journal and Inkpress are two unrelated repos again. Nimble’s web restyled to Maybulb design system with splash screen. Talli’s Bennies dashboard now in Status tab. NYC’s autoplay fully fixed. Lexly profile redesigned. BCGD macOS build live on ASC. Curvely privacy + metadata set.