koinophobia.dev

Build log · updated July 26, 2026

What actually happened.

The running record of building all of this — releases, defects, reversals, and the decisions in between. Newest first. Every entry is something that happened, not something I'm promising, and the specific claims carry their sources.

Entries before July 26, 2026 were backfilled that day from release records — delivery logs, merged pull requests, health endpoints. From July 26 on, the log is written as the work happens. Wrong entries get corrected by newer entries, never deleted.

  1. ReleaseThis site

    The site became a founder OS

    What changed
    Rebuilt the koinophobia.dev homepage as a control room — current focus, every product with its real stage, this log, and a start-here router by visitor type. Re-verified every product status against artifacts on the same day, because two of them were about to trip their own freshness alarms.
    Why it mattered
    The work was scattered across apps, chats, and release logs where nobody could see it. A founder's public record should be the evidence, not a summary of it.
    What I decided next
    Keep the log alive with every working session, and get Project Reach Back into the constellation once there's a checkable paragraph of truth about it.
    1 source
    The statuses were about to go stale by the site's own rules
    lib/dev/universe.ts stage budgets: Trendi and You Know Ball carry 7-day windows, last verified 2026-07-20
  2. ReleaseTrendi

    Three TestFlight uploads in one evening — two of them fixes

    What changed
    Build 120 shipped Record Mode's beta package to TestFlight. The first pass on the phone found a paid-for coach script rendering as five empty sections — fixed in 121. Then the live camera preview showed sideways on the front sensor while recordings stayed upright — fixed in 122 by letting Apple's rotation coordinator drive the preview.
    Why it mattered
    Both defects were invisible in the simulator and surfaced within hours of a genuine install. Weeks of green automated runs had voted; the device decided.
    What I decided next
    A deliberate on-device update pass and the focused record → playback → share gate list on build 122 before any external tester touches it.
    2 sources
    All three builds were uploaded and accepted on July 25
    altool delivery UUIDs e5cbeefe (120), caa3229b (121), d811be60 (122); App Store Connect processed each VALID
    The archives exist
    ~/Library/Developer/Xcode/Archives/2026-07-25/Trendi-0.1.0-{120,121,122}.xcarchive
  3. ReleaseThe studio

    Sales packets, and a real login for the CRM

    What changed
    Qualified studio leads now produce a founder-ready sales packet instead of a raw CRM row, and the private CRM moved from a shared secret to staged Google authentication.
    Why it mattered
    The gap between “a lead exists” and “Blake can walk into the conversation prepared” was manual work that happened at the worst possible time. And a shared secret is the kind of debt that gets more embarrassing the longer the CRM matters.
    What I decided next
    Retire the legacy secret fallback entirely once the staged rollout proves out.
    1 source
    Both landed on main through reviewed PRs
    koinophobia-labs-site #40 (merge b0bfa8e) and #41 (merge 8018cdf), 2026-07-25
  4. MilestoneKoi Cave

    Koi Cave's operator loop closed for the first time

    What changed
    A typed command became a validated packet, passed an approval gate, ran a repo-inspection worker against the real Trendi checkout, and came back as a receipt that a separate validator re-checked from artifacts on disk. The worker cannot declare its own success.
    Why it mattered
    This is the difference between a notes app and an operator brain: work you can delegate and then verify without trusting the thing that did it.
    What I decided next
    The loop stays unmerged until the human-hands gate runs — Blake typing the command into the composer himself. No more feature work before that.
    1 source
    The first live receipt exists with proof artifacts
    KOI_CAVE_OPERATOR_LOOP_V1_REPORT.md; receipt 7F044DA9, proof directory present 2026-07-26
  5. ReleaseLabs Concierge

    The koi got a front office — then an audit took it apart

    What changed
    Both sites' koi became a structured front desk: messy thought → one-question-at-a-time clarifying → an editable brief → an honest recommendation, with nothing sent before consent. Days later, a ten-journey walkthrough scored it 63/100 — the front door was hidden behind an unlabeled fish — and all nine defects it found were fixed and merged the same day.
    Why it mattered
    Conversion surfaces rot fastest, and the only way to know is to walk in as a stranger. The score wasn't the embarrassment; shipping without the walkthrough was.
    What I decided next
    A five-human benchmark before the flow gets called done — automated self-scoring already fooled me once.
    2 sources
    Shipped and fixed through reviewed PRs with verified production deploys
    koinophobia-labs-site #38 (front office) and #39 (all nine audit defects), merged 2026-07-21
    The audit and fix list are on the record
    docs/FRONT_OFFICE.md and the 2026-07-21 ease-of-use audit (63/100 weighted, ten journeys)
  6. LessonThis site

    The site was wrong about my own products — in both directions

    What changed
    An audit of every product claim against artifacts found three of four statuses wrong, including an underclaim: the site said no You Know Ball build had ever been uploaded, while Apple's own 409 logs named two it had already accepted. Every status now carries a verification date and evidence, and the test suite fails when either goes stale.
    Why it mattered
    Writing status from memory produced both flattery and false modesty. Confident self-criticism turned out to be as unreliable as confident marketing — and harder to catch, because nobody fact-checks the sentence that makes you look bad.
    What I decided next
    Statuses only move when someone looks at artifacts, and the freshness budgets make “someone looked” a dated, testable claim.
    1 source
    The full audit trail is in the repo
    docs/RELEASE-TRUTH-RECONCILIATION.md, committed with PR #36
  7. DecisionCareer Forge

    Career Forge closed its own store

    What changed
    An audit found the $49 fulfillment path ran entirely in the buyer's browser — close the tab on the way back from Stripe and the license was never issued, with nothing recording it. Checkout was closed the same day, and reopening was tied to a demonstrated end-to-end journey rather than to configuration.
    Why it mattered
    A checkout that refuses to open is a bad day. One that charges and delivers nothing is a refund, an apology, and someone's trust.
    What I decided next
    Build the durable order store, then re-certify the journey on the deployed code. (Update, July 26: the store now exists and passes its health checks; the certification is pinned to an exact commit, so checkout stays closed until the journey is re-proven on the code that's running.)
    1 source
    The brake and its reason are live and inspectable
    career-forge-lite#28 (3c66a77); GET /api/commerce-health returns canSellSafely:false with the pinned-commit reasons, checked 2026-07-26
  8. ReleaseThis site

    koinophobia.dev became a product laboratory

    What changed
    The personal site grew from four routes to a full universe: product pages with per-product visual worlds, honest stage + reach on everything, a lab of experiments, and its own sitemap. Every product status became a dated, evidenced claim.
    Why it mattered
    One click past the homepage, visitors used to land in studio chrome with contradictory labels. The two-site story broke exactly where curiosity started.
    What I decided next
    Keep the universe as the single source of truth — every other surface renders from it or disagrees with it loudly in tests.
    1 source
    Shipped as one reviewed PR
    koinophobia-labs-site #36, squash-merged 2026-07-20 (4adb896) with a verified production deploy
  9. ReleaseCareer Forge

    Career Forge v0.10.0-beta.1 ships

    What changed
    The beta line went to production after a readiness sprint: early-win bullets so the first session produces something usable, and a first-run profile where nine fields became optional and collapsed.
    Why it mattered
    People were abandoning at a wall of empty textareas. Completion beats completeness — a shorter form that gets finished outperforms a smarter one that doesn't.
    What I decided next
    Watch whether strangers finish the workflow, and treat the paid path as unproven until it's demonstrated end to end.
    1 source
    The release is tagged
    career-forge-lite tag v0.10.0-beta.1 at b1be8b2, deployed to career-forge-lite.vercel.app
  10. ReleaseTrendi

    Trendi build 118 finally lands on TestFlight

    What changed
    After an Apple account permission stranded two finished builds for days, build 118 uploaded, processed clean, and installed from TestFlight.
    Why it mattered
    For days the testers' build was three releases behind the best one on this machine, and that gap was invisible from the outside. Shipping and delivering are different verbs.
    What I decided next
    Close the clean-state isolation gate — which needs a second real Apple account — before calling any build the release candidate.
    1 source
    118 was installed from TestFlight
    TestFlight app page record: Version 0.1.0 (118), release date Jul 19 2026, 90-day expiry
  11. DefectYou Know Ball

    You Know Ball promised a bonus it never paid

    What changed
    The +2 comeback bonus — an elite take while trailing big — turned out to be dead code behind a flag that nothing disables, while the result card kept promising it (and quoted the wrong number). Fixed by paying it as an independent modifier, with the copy and the mechanic reading from one constant. Verified on a real device through a save-preserving install: the mid-battle scene state survived the upgrade byte for byte.
    Why it mattered
    A promise in the UI is a claim about the system. If the copy and the mechanic can drift apart, the score stops being a score.
    What I decided next
    The fix sits on the unmerged branch with the clutch-finish work; the release step is still a tester group, not more engine.
    1 source
    The fix is committed
    banter-bot-content-expansion commit 7fa7873 on feature/content-depth-expansion
  12. MilestoneThe studio

    The studio can take real money

    What changed
    Stripe moved from a test sandbox to the live account: a durable webhook endpoint, live keys in production, and the CRM's proposal → deposit flow verified end to end with a real checkout session — tamper and replay checks included.
    Why it mattered
    An intake pipeline that ends at “we'll invoice you somehow” isn't a pipeline. The studio can now be paid the moment the work is agreed.
    What I decided next
    Say it plainly on the record: infrastructure that CAN take payment is not a customer. The proof this system is waiting for is a signed engagement, not a webhook.
    1 source
    The live webhook endpoint exists and processed real events
    Stripe live endpoint we_1TsDzb… at koinophobia.dev/api/stripe/webhook; a real checkout.session.expired was delivered and replay-verified 2026-07-11/12