back

Merge

Week of July 18

Friday (July 18)

Fixed the resume. The old version claimed enrollment at UVic, which isn’t accurate – self-taught, applying there, not enrolled. Removed the false claim, reordered to lead with eight production apps instead of burying them under older retail and hardware-repair history, trimmed non-technical jobs, and regenerated the PDF via headless Chrome.

Then ran an App Store Connect icon audit across all PNGs: all passed the 1024x1024 no-alpha checks. Shipped eight app builds to clear placeholder icons (BCGD, Books iOS and Mac, Spark Mac, portfolio iOS, Healstack iOS). Fixed Casewright’s macOS icon by stripping the alpha channel and adding a missing DocumentsTabView.swift file that was blocking every archive. Closed out the Casewright-to-Litigate rename: removed the red exclamation badge that was baked into the icon artwork, regenerated all icon variants from the cleaned SVG source, uploaded build 3 to ASC.

Portfolio homepage got an animated Memoji avatar. Extracted the face from a contact-poster screenshot using Python and PIL blue-channel chroma-key, built a CSS gradient bubble to house it, and layered the face on top with a looping bob-and-tilt animation. Renders cleanly in both light and dark mode.

Finished summarizing Becoming Steve Jobs chapters 11 and 12, covering the Apple retail launch, the iTunes Music Store deal, and Jobs’s 2004 cancer diagnosis. Also read and summarized Apple: The First 50 Years chapters 11-13. Built the /market skill for pulling today’s top WSJ and Bloomberg videos and synthesizing a briefing from their transcripts.

Saturday (July 18)

ASC record consolidation. Unified Spark and Books Mac targets under their iOS bundle IDs so new Mac builds land in the single app record instead of a separate entry. Fixed two longstanding Books Mac upload blockers: the app-sandbox entitlement was declared in a .entitlements file but never wired into the Xcode target, and LSApplicationCategoryType was missing. Both Mac builds validated clean. Removed the now-orphaned “Spark Mac” and “Books Mac” app records via browser automation.

Renamed Books to Spine: Xcode project (BooksApp to Spine), targets, source directory, site CNAME, GitHub repo, READMEs, CLAUDEs. Found “Spine” is already taken on the App Store, so tried twelve alternate names until “Spinelist” cleared the availability check. The ASC app record (id 6792376485, bundle com.heyitsmejosh.spine) is live with both iOS and macOS platforms registered, waiting on a build upload.

Sunday (July 19)

Lexly unpaywalled. All seven course categories are free now – the prior Stripe checkout gate never actually worked, and Apple’s rejection asked for an honest answer about paid features. Pro tier reframed as a perks layer (unlimited streak freezes) rather than a content gate. Added an iOS Settings view and moved Sign Out into it. Both iOS and macOS builds submitted to App Review as v1.1.1.

Rebuilt Inkpress from scratch after its “minimum functionality” rejection. It’s now a proper multi-feed RSS reader: users can add or remove any RSS or Atom feed, see an aggregated timeline, and manage subscriptions. Seeds itself with journal.heyitsmejosh.com/feed.xml on first launch, but that feed is fully removable like any other.

Finalized the Litigate rename and the canlii-app merge. Brief-to-Casewright-to-Litigate chain closed: the CanLII case-law search got folded in as a fifth tab, icon artwork cleaned, screenshots added. Also wired SwiftLint compile-time linting into five apps (epiphany, talli, healstack, lexly, litigate) and fixed a Talli Xcode Cloud build-tool-plugin blocker that had been breaking headless CI archives.

Monday (July 20)

Finished the Apple: The First 50 Years book summary. Processed the remaining chapter batches covering chapters 16-50: the iPhone and Woz years, the NeXT era and Jobs’s return, the iMac and early 2000s, iTunes and the digital revolution, and Apple Silicon through Apple Intelligence. Full summary committed and live on spine.heyitsmejosh.com.

Ran a /work sweep across fifteen projects and caught ten real bugs to fix: Echo’s Pro paywall was hardcoded true everywhere and silently gating paid features, Epiphany’s Markets news drawer was fetching on every tab switch instead of only when the drawer opened, Sparkjar’s ship-ios pipeline was pointing at the wrong ExportOptions.plist destination, Talli and the portfolio site had stale app icons, Litigate had drifting support and marketing URLs in ASC, and Healstack’s App Review demo account was broken. All ten fixed.

Ran a full account-deletion compliance audit across all shipped apps per App Store Guideline 5.1.1(v). Three apps were missing delete-account capability (Healstack, Lexly, Sparkjar). Fixed all three: wired a shared delete-account Supabase Edge Function into Healstack and Lexly, and added a new delete-account action to Sparkjar’s auth handler with a native UI reachable from the profile view. All three build-verified and pushed.

Tuesday (July 21)

Biggest hosting move yet: 12 repos, 13 domains migrated from Vercel to Cloudflare Pages in one session – nulljosh.github.io, litigate, bcgd, echo, nyc, etyma, grapher, wiretext, life, roost, inkpress, and lexly. All sites verified live with DNS confirmed. The four apps with live payments or real auth complexity (Epiphany, Sparkjar, Healstack, Talli) are staying on Vercel until they get proper Workers/KV rewrites.

Separated the journal and Inkpress repos cleanly. They had gotten tangled from a naming accident; they’re now two independent codebases. Inkpress can subscribe to journal.heyitsmejosh.com/feed.xml like any other feed but has no forced connection.

Shipped three app submissions: Litigate iOS 1.0.1 build 4 (support URL fix, account deletion, display name corrected from “Casewright”), Healstack 1.0 (medical device declaration cleared via ASC web dashboard, then submitted for review), and Inkpress 1.0.2 (pricing and availability configured, submitted). Built Echo Mac metadata from scratch and got Echo Mac 1.3.3 into review. Rewrote the wiki index with all current app names after finding it had gone stale with a dozen outdated references including “spark”, “news-app”, “brief”, “dose”, and “lingo”.

Wednesday (July 22)

Fixed a dark-mode halo around the portfolio’s Memoji avatar. Non-premultiplied alpha on the transparent edge pixels was blending light RGB values against the dark background during browser downscaling, creating a visible glow in Chrome on macOS but invisible in Safari. Premultiplying the alpha channel – storing (0,0,0,0) on transparent pixels instead of (255,255,255,0) – fixed it.

Submitted Talli 3.5.8 for review. Discovered that the What’s New sheet was still showing “3.5.6” despite the app being on 3.5.8 because the version string was hardcoded. Changed it to read from the bundle version at runtime so it can never drift again. Submitted Echo iOS 1.3.3 after fixing a button-state freeze that was blocking reviewers. Investigated Litigate’s rejection and found the real cause: Sign in with Apple was backed by a Supabase provider that was never enabled in the Supabase dashboard. Removed the button and resubmitted rather than fixing the configuration. Filed Apple support tickets for two orphaned Mac app records (Echo Transcribe Mac, Lexly Mac) that the dashboard refuses to let us delete.

Did a native SwiftUI rewrite of the Spine iOS app. It had been a WKWebView wrapper with off-center layout and raw markdown rendering. Rebuilt it with real SwiftUI views, bundled the JSON and markdown data directly into the app so it works offline, and fixed both the layout and markdown problems. Updated the sync script so bundled data stays in sync as the site updates.

Folded four standalone repos (abraham, video-speed-ext, bank, code-meta) into the labs monorepo where they belong. Deleted the archived braingraph repo, which had already been merged into notes. Repo count dropped from 27 active to 22.

Completed the Calculus for Dummies summary pipeline – all 22 chapters across four batches from iCloud photos, merged into a single file, synced to the Spine site, badge added. Inkpress 1.0.2 was approved by Apple App Review and is now live. Started IBS For Dummies (Introduction and Chapter 1, 13 of roughly 323 pages) before usage limits stopped progress.

Apps Summary

In review: Talli v3.5.8 (submitted 07-22), Echo v1.3.3 iOS (submitted 07-22), Echo v1.3.3 Mac (submitted 07-21), Lexly v1.1.1 iOS + Mac (submitted 07-19), Litigate v1.0.1 build 4 (resubmitted 07-22, Sign-in-with-Apple removed), Healstack v1.0 (submitted 07-21), Inkpress v1.0.2 (approved 07-22, live).

Live: Epiphany v2.6.1 (Pro tier, Yelp venues, Stripe fixes), Sparkjar v2.2.0 (Mac live; iOS provisioning fixed 07-18), Newsline v0.2.0 (15-outlet RSS reader, Cloudflare Worker), Nimble (Gemma proxy), Spine (Cloudflare Pages; book summaries including Calculus for Dummies now live).

Cloudflare (as of 07-21): 12 apps, 13 domains moved. Remaining on Vercel: Epiphany, Sparkjar, Healstack, Talli.

Pending: Spinelist ASC record ready (bundle com.heyitsmejosh.spine), no build uploaded yet. BCGD icon redesigned 07-22, ASC upload pending. Portfolio iOS icon fixed, submission pending.

Blockers: Sparkjar bundle ID rename (deferred to preserve provisioning-profile fix). Epiphany SnapTrade phantom holdings disabled; Twitter/X dev account deleted, sign-in buttons removed. Orphaned Mac records (Echo Transcribe Mac case 102949488998, Lexly Mac case 102949489427) pending Apple support.