<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://journal.jaybulb.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://journal.jaybulb.com/" rel="alternate" type="text/html" /><updated>2026-10-11T17:17:47-07:00</updated><id>https://journal.jaybulb.com/feed.xml</id><title type="html">Joshua’s Journal</title><subtitle>Plain-English updates on the apps, AI and operating system I build, by Joshua Trommel.</subtitle><author><name>Joshua Trommel</name></author><entry><title type="html">October</title><link href="https://journal.jaybulb.com/2026/10/02/october/" rel="alternate" type="text/html" title="October" /><published>2026-10-02T12:00:00-07:00</published><updated>2026-10-02T12:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/10/02/october</id><content type="html" xml:base="https://journal.jaybulb.com/2026/10/02/october/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">October</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">oct 1 to 4: Raspberry Pi coming</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">Joshua Tree reached its 2.0 release</text>
  <text fill="currentColor" x="48" y="270" font-size="19">Bookrank live on iPhone with voices</text>
  <text fill="currentColor" x="48" y="304" font-size="19">Hagaki and Hikko renamed and sent to Apple</text>
  <text fill="currentColor" x="48" y="338" font-size="19">Raspberry Pi 4B arrives to test my OS</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">apps worked on</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">13</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">this weekend</text>
  <text fill="currentColor" x="584" y="340" font-size="16">Pi first boot</text>
  <text fill="currentColor" x="584" y="362" font-size="16">then Wi-Fi</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-10-04</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/turing"><text fill="currentColor" x="48" y="157" font-size="14">turing</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">366</text>
<a href="https://github.com/nulljosh/epiphany"><text fill="currentColor" x="48" y="183" font-size="14">epiphany</text></a>
<rect x="150" y="172" width="211" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="369" y="183" font-size="14" opacity="0.6">227</text>
<a href="https://github.com/nulljosh/vancouvervice"><text fill="currentColor" x="48" y="209" font-size="14">vancouvervice</text></a>
<rect x="150" y="198" width="182" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="340" y="209" font-size="14" opacity="0.6">196</text>
<a href="https://github.com/nulljosh/joshuatree"><text fill="currentColor" x="48" y="235" font-size="14">joshuatree</text></a>
<rect x="150" y="224" width="178" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="336" y="235" font-size="14" opacity="0.6">192</text>
<a href="https://github.com/nulljosh/conveyer"><text fill="currentColor" x="48" y="261" font-size="14">conveyer</text></a>
<rect x="150" y="250" width="165" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="323" y="261" font-size="14" opacity="0.6">178</text>
<a href="https://github.com/nulljosh/notes"><text fill="currentColor" x="48" y="287" font-size="14">notes</text></a>
<rect x="150" y="276" width="121" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="279" y="287" font-size="14" opacity="0.6">130</text>
<rect x="48.0" y="363" width="11.0" height="21" fill="currentColor" opacity="0.5" />
<rect x="60.0" y="371" width="11.0" height="13" fill="currentColor" opacity="0.5" />
<rect x="72.0" y="372" width="11.0" height="12" fill="currentColor" opacity="0.5" />
<rect x="84.0" y="380" width="11.0" height="4" fill="currentColor" opacity="0.5" />
<rect x="96.0" y="372" width="11.0" height="12" fill="currentColor" opacity="0.5" />
<rect x="108.0" y="381" width="11.0" height="3" fill="currentColor" opacity="0.5" />
<rect x="120.0" y="376" width="11.0" height="8" fill="currentColor" opacity="0.5" />
<rect x="132.0" y="381" width="11.0" height="3" fill="currentColor" opacity="0.5" />
<rect x="144.0" y="383" width="11.0" height="1" fill="currentColor" opacity="0.5" />
<rect x="156.0" y="383" width="11.0" height="1" fill="currentColor" opacity="0.5" />
<rect x="168.0" y="348" width="11.0" height="36" fill="currentColor" opacity="0.5" />
<rect x="180.0" y="340" width="11.0" height="44" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 12 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">1961</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">56</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-09-21 to 2026-10-02</text>
</svg>

<h2 id="oct-1-to-3">Oct 1 to 3</h2>

<p>Joshua Tree reached 2.0 with twenty-six apps in protected boxes and fixed flaky tests. Bookrank is live on iPhone with natural voices, Goodreads import, offline reading and highlights. All my apps are now 99 cents.</p>

<p>Epiphany maps load in 4 seconds, down from 23. Premium plan is $1 and auto-trading is live. A stock rule I paper-traded, Double 7s, hit 77 percent. Talli was rejected over a broken test account and resubmitted. Notate went live on iPhone at 99 cents.</p>

<p>Joshua Tree shipped six versions with a 30-second intro and Music and Movies apps.</p>

<h2 id="oct-4">Oct 4</h2>

<p>A Pi 4B is on the way for real hardware. Apps on the Pi run in locked rooms, and Bookrank, Tonchi and Hikko show real data.</p>

<p>My idea app became Hikko (Hotaru was taken), with near-white paper and terracotta accent. iPhone and Mac 3.0 are in review, the Mac with terracotta buttons and sidebar.</p>

<p>Mailbag fixed Mac window focus, demo sign-in and the sorter; Gmail sign-in on Mac is blocked. Lexly became Tonchi, now 165 courses. Healstack got a web redesign and a privacy fix; iOS is live, Mac in review.</p>

<p>Turing shipped with file-picking answers, a new Mac icon and her own 1.5B model (850 MB). Wrong picks under 10 per set; a follow-up cut refusals to 2.6 percent.</p>

<h2 id="oct-5">Oct 5</h2>

<p>Joshua Tree landing is live with a refreshed logo on Samantha’s face.</p>

<p>Apple rejected seven apps under spam: Hamurapi, Windgate, Madobe, Mailbag, Curbfind, Plaintxt, Sidewise; Hikko got stale-screenshots. Plaintxt got line numbers, Go to Line and preview. Sidewise rebuilt with Compare, Share extension, widget. Madobe got Mac Float, Pair pages, per-site rules and App Intents. All five resubmitted.</p>

<p>Epiphany’s map search now uses Places; iPhone submitted. Curbfind shipped Near me and a smarter ranker; Apple rejected it and I replied. Conveyer retired the beaten world.</p>

<p>NYC Survive’s overnight loop made it winnable; iOS is live, macOS in review. Recruits tie to beds and food, squads take orders, and night raids come unless you set PATROL. A headless bot wins it in about two hours.</p>

<h2 id="oct-5-to-6">Oct 5 to 6</h2>

<p>Swept 15 Apple Notes into project roadmaps and emptied Notes.app. Nimble shipped spoken math and dropped “Answers” from its store name.</p>

<p>Notate, Talli and Plank got UI fixes.</p>

<h2 id="oct-6">Oct 6</h2>

<p>The Pi 4 booted Joshua Tree at 1920x1080 after a cache flush fix. USB worked in QEMU, then on the Pi after a cable swap. A Claude relay lets my Mac build the OS inside it.</p>

<h2 id="oct-7">Oct 7</h2>

<p>The Pi joined Wi-Fi; the chip has no login helper, so I wrote the WPA2 handshake and the green light blinks again.</p>

<p>Samantha answers on the real Pi via my API credit. A relay on my Mac picks a cheap or strong model per question. She can read a shared Mac folder, read-only.</p>

<p>An agent wrote the Pi-side actions on its branch, so asking Samantha now prints a note and blinks the light. The safety check rightly blocked a Codex mode that let anyone on the network run programs on my Mac; Codex waits for a tunnel. An overnight runner works branches only, $5 cap per run.</p>

<p>Next: split the kernel’s giant C file, then HTTPS. Money comes from a Pi dev kit with a waitlist, and the OS stays free.</p>

<h2 id="oct-8">Oct 8</h2>

<p>I wrote the Joshua Tree story as an eleven-chapter book with board photos. The Pi’s first benchmark: memory copies about 1100 MB/s, Wi-Fi in 6.4 seconds, clock in 8.7.</p>

<p>The Pi got a scientific calculator and a tiny language model. After a DNS fix it loaded heyitsmejosh.com over HTTPS, the board’s first real web page, though it still can’t run scripts.</p>

<p>I also found a hole: every Pi image carried my relay key, not only the dev card. The fix is in review; two more are queued: the key crosses Wi-Fi in plain text, and the clock trusts an unchecked date header.</p>

<h2 id="oct-9-to-10">Oct 9 to 10</h2>

<p>I halved my custom skills and flashed the checked Pi card. Signup email arrived; I redesigned it, fixed mobile signup, tightened Samantha’s shared-folder access and wrote the Wi-Fi guide. Relay encryption and clock checks still need hardware.</p>

<p>The landing refresh is live after QA; a draft adds Pi screen sleep, with CI and a real-Pi check to come.</p>

<h2 id="oct-11">Oct 11</h2>

<p>I built xread, a digest of twenty AI accounts on X, and Plank can call AI models. Most web apps moved from Supabase to spark-api, my Cloudflare backend; passwords stayed behind, so everyone resets. Heyitsmejosh.com lapses on the 13th by choice, so the brand moves to jaybulb.com, with a new landing page (yellow sidebar, bulb-and-pencil logo). About forty web repos point at it, and sign-in mail comes from it.</p>

<p>My Goodreads shelves now sit under my summaries, with half stars and a mini player. I called the Mac app’s first layout hideous, so it became a Mail-style three-column window; its clipped account screen scrolls now. When spark-api stopped recognising their Supabase sign-in, the installed apps fell back to the robot voice; the last version was approved today. The voice meter was stuck on Checking, and every native user shared one daily cap; now each has one.</p>

<p>From chat, Turing can boot, type into, screenshot and stop Joshua Tree, and read its log. A real boot found two bugs, one that could have killed another session’s build machine, so she now stops only her own. I tested 109 of her older abilities for real and fixed 24. The landing demo, dead since an earlier release today (a syntax error), is back. The newest training run became her tool picker: better on four of five test sets, with fewer leaks. The Mac app keeps her model in its own folder. The iPhone app runs her exact tools and models on the phone; the Mac is optional.</p>

<p>On the Pi, the Bluetooth mouse pairs and drives the pointer; files survive a reboot on the SD card.</p>

<p>I started marketing Dad’s Langley garage door business: 37 Instagram posts, a 30-day calendar, a $4 trailer. The Katana shot needs a paid Higgsfield plan, so I used a cheap stand-in without asking. A stock voice sounded wrong, so he records his own.</p>

<p>I cleared 93 YouTube Watch Later videos, deleted three retired projects, and moved my 69 saved X bookmarks into my notes, reading five long articles first, then unbookmarked them. X blocked my automation login, so xread now drives a plain Chrome profile over a debug port; the scripts live in dotfiles.</p>

<p>Healstack is Intake, Voxprint is Notate, Sparkjar is Hikko and Lexly is Tonchi, in repos and launch kits. Hacker News turned down Notate’s Show HN (account too new), so I posted fourteen X launch threads, prices fixed first. Eleven App Store listings moved to jaybulb.com where Apple allows; native code in twenty repos points there. A login bug on Talli’s new domain was a server allowlist I forgot; its new version is submitted. Nimble’s history syncs between iPhone and Mac via iCloud, and its iPhone build is with Apple.</p>

<h2 id="apps">Apps</h2>

<p>Joshua Tree, Hamurapi, Bookrank, Epiphany, Plank, Nimble, Talli, Turing, Conveyer, Tonchi, Notate, Mailbag, Hikko, Blockframe, Windgate.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[October: Joshua Tree 2.0, Bookrank on iPhone, two renames, and a Raspberry Pi coming to test my OS on real hardware.]]></summary></entry><entry><title type="html">Kernel</title><link href="https://journal.jaybulb.com/2026/09/21/kernel/" rel="alternate" type="text/html" title="Kernel" /><published>2026-09-21T12:00:00-07:00</published><updated>2026-09-21T12:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/09/21/kernel</id><content type="html" xml:base="https://journal.jaybulb.com/2026/09/21/kernel/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">Kernel</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">late september: my operating system grows up</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">apps run in protected boxes</text>
  <text fill="currentColor" x="48" y="270" font-size="19">Samantha reads mail and explains math</text>
  <text fill="currentColor" x="48" y="304" font-size="19">case and OS kit priced at $199</text>
  <text fill="currentColor" x="48" y="338" font-size="19">eight apps dropped to 99 cents</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">apps in protected boxes</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">26</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">next</text>
  <text fill="currentColor" x="584" y="340" font-size="16">2.0 release</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-09-28</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/joshuatree"><text fill="currentColor" x="48" y="157" font-size="14">joshuatree</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">564</text>
<a href="https://github.com/nulljosh/turing"><text fill="currentColor" x="48" y="183" font-size="14">turing</text></a>
<rect x="150" y="172" width="81" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="239" y="183" font-size="14" opacity="0.6">134</text>
<a href="https://github.com/nulljosh/notes"><text fill="currentColor" x="48" y="209" font-size="14">notes</text></a>
<rect x="150" y="198" width="62" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="220" y="209" font-size="14" opacity="0.6">103</text>
<a href="https://github.com/nulljosh/dotfiles"><text fill="currentColor" x="48" y="235" font-size="14">dotfiles</text></a>
<rect x="150" y="224" width="19" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="177" y="235" font-size="14" opacity="0.6">32</text>
<a href="https://github.com/nulljosh/nulljosh.github.io"><text fill="currentColor" x="48" y="261" font-size="14">nulljosh.github.io</text></a>
<rect x="150" y="250" width="17" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="175" y="261" font-size="14" opacity="0.6">28</text>
<a href="https://github.com/nulljosh/gato"><text fill="currentColor" x="48" y="287" font-size="14">gato</text></a>
<rect x="150" y="276" width="16" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="174" y="287" font-size="14" opacity="0.6">27</text>
<rect x="48.0" y="363" width="11.0" height="21" fill="currentColor" opacity="0.5" />
<rect x="60.0" y="357" width="11.0" height="27" fill="currentColor" opacity="0.5" />
<rect x="72.0" y="364" width="11.0" height="20" fill="currentColor" opacity="0.5" />
<rect x="84.0" y="376" width="11.0" height="8" fill="currentColor" opacity="0.5" />
<rect x="96.0" y="375" width="11.0" height="9" fill="currentColor" opacity="0.5" />
<rect x="120.0" y="383" width="11.0" height="1" fill="currentColor" opacity="0.5" />
<rect x="132.0" y="379" width="11.0" height="5" fill="currentColor" opacity="0.5" />
<rect x="144.0" y="340" width="11.0" height="44" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 9 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">1367</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">53</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-09-12 to 2026-09-20</text>
</svg>

<h2 id="joshua-tree">Joshua Tree</h2>

<p>Joshua Tree is the operating system I am building from scratch. This stretch it learned to run several programs at once, read disks and files, connect to a network and show a live landing page. It got Mail, Contacts, Calculator, Weather and wallpapers. Each app now runs in its own protected box, so one crashing cannot take down the whole system. It also got a new logo, sharper text and a sound card driver. I designed a case for it with six desert-layer rings and a tree engraved on top. The plan is $199 for the case and OS, or $349 for the complete kit. I also made a 36-second ad with Samantha’s voice and music.</p>

<h2 id="samantha-and-turing">Samantha and Turing</h2>

<p>Turing is my local AI assistant, and Samantha is the voice and face I gave it. She can now research on Wikipedia, write briefs, read my mail, notes and reminders, and explain math up to Pre-Calc 12. Her face and voice work on the Mac and phone. I made her pick the right tool more often: wrong picks on test questions went down by more than half. Turing shipped nine releases in one day.</p>

<h2 id="apps">Apps</h2>

<p>I dropped eight apps to 99 cents. Curvely now matches Desmos. Plank, Hamurabi, Roost, Dream and Hormuz went out. Madobe, my small web browser, got renamed. Bookrank and Lec got quizzes, and Homeroom got practice questions. Every project now has full documentation, and a big redesign touched 28 landing pages. Nimble for iPhone was approved, and Sidewise’s iPhone version was rejected while the Mac version is live.</p>

<h2 id="vancouver-vice">Vancouver Vice</h2>

<p>My Vancouver crime game now has SkyTrain, Victoria and Langley, and a face scan that makes the main character look like me. I wrote its docs and finished its second act.</p>

<h2 id="housekeeping">Housekeeping</h2>

<p>I closed 29 old GitHub issues, deleted 44 old branches and freed 5 GB of disk space. New rules for myself: stability and security work comes before new features, and anything stuck in the background for 30 minutes gets killed.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[Late September: my operating system now runs apps in protected boxes, and my AI assistant Samantha learned a lot.]]></summary></entry><entry><title type="html">Scale</title><link href="https://journal.jaybulb.com/2026/09/11/scale/" rel="alternate" type="text/html" title="Scale" /><published>2026-09-11T12:00:00-07:00</published><updated>2026-09-11T12:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/09/11/scale</id><content type="html" xml:base="https://journal.jaybulb.com/2026/09/11/scale/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">Scale</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">september: 30 apps live</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">30 apps live, 17 got Android versions</text>
  <text fill="currentColor" x="48" y="270" font-size="19">taught a program to win Duolingo chess</text>
  <text fill="currentColor" x="48" y="304" font-size="19">got my Canadian business number</text>
  <text fill="currentColor" x="48" y="338" font-size="19">paid apps went on sale at $1</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">apps live</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">30</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">next</text>
  <text fill="currentColor" x="584" y="340" font-size="16">Product Hunt launches</text>
  <text fill="currentColor" x="584" y="362" font-size="16">thirteen scheduled</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-09-12</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/notes"><text fill="currentColor" x="48" y="157" font-size="14">notes</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">503</text>
<a href="https://github.com/nulljosh/monocode"><text fill="currentColor" x="48" y="183" font-size="14">monocode</text></a>
<rect x="150" y="172" width="227" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="385" y="183" font-size="14" opacity="0.6">336</text>
<a href="https://github.com/nulljosh/cruise"><text fill="currentColor" x="48" y="209" font-size="14">cruise</text></a>
<rect x="150" y="198" width="147" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="305" y="209" font-size="14" opacity="0.6">217</text>
<a href="https://github.com/nulljosh/epiphany"><text fill="currentColor" x="48" y="235" font-size="14">epiphany</text></a>
<rect x="150" y="224" width="99" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="257" y="235" font-size="14" opacity="0.6">147</text>
<a href="https://github.com/nulljosh/tonchi"><text fill="currentColor" x="48" y="261" font-size="14">tonchi</text></a>
<rect x="150" y="250" width="75" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="233" y="261" font-size="14" opacity="0.6">111</text>
<a href="https://github.com/nulljosh/nimble"><text fill="currentColor" x="48" y="287" font-size="14">nimble</text></a>
<rect x="150" y="276" width="74" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="232" y="287" font-size="14" opacity="0.6">109</text>
<rect x="48.0" y="368" width="11.0" height="16" fill="currentColor" opacity="0.5" />
<rect x="60.0" y="377" width="11.0" height="7" fill="currentColor" opacity="0.5" />
<rect x="72.0" y="349" width="11.0" height="35" fill="currentColor" opacity="0.5" />
<rect x="84.0" y="347" width="11.0" height="37" fill="currentColor" opacity="0.5" />
<rect x="96.0" y="376" width="11.0" height="8" fill="currentColor" opacity="0.5" />
<rect x="108.0" y="340" width="11.0" height="44" fill="currentColor" opacity="0.5" />
<rect x="120.0" y="355" width="11.0" height="29" fill="currentColor" opacity="0.5" />
<rect x="132.0" y="359" width="11.0" height="25" fill="currentColor" opacity="0.5" />
<rect x="144.0" y="349" width="11.0" height="35" fill="currentColor" opacity="0.5" />
<rect x="156.0" y="362" width="11.0" height="22" fill="currentColor" opacity="0.5" />
<rect x="168.0" y="370" width="11.0" height="14" fill="currentColor" opacity="0.5" />
<rect x="180.0" y="345" width="11.0" height="39" fill="currentColor" opacity="0.5" />
<rect x="192.0" y="360" width="11.0" height="24" fill="currentColor" opacity="0.5" />
<rect x="204.0" y="378" width="11.0" height="6" fill="currentColor" opacity="0.5" />
<rect x="216.0" y="368" width="11.0" height="16" fill="currentColor" opacity="0.5" />
<rect x="228.0" y="368" width="11.0" height="16" fill="currentColor" opacity="0.5" />
<rect x="240.0" y="341" width="11.0" height="43" fill="currentColor" opacity="0.5" />
<rect x="252.0" y="340" width="11.0" height="44" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 18 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">3235</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">50</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-08-25 to 2026-09-11</text>
</svg>

<h2 id="early-september">Early September</h2>

<p>September opened with security fixes across six apps. I built Plain, a text editor, and Breathe, a breathing app, in a day each. All 17 of my web apps got real Android versions, and I now have 30 apps live. I also built a helper that hands boring chores to a free AI running on my own computer, which saves money.</p>

<h2 id="sep-4-to-7">Sep 4 to 7</h2>

<p>I started Hackrange, a security training game, and published Bookrank’s Listen feature. I wired payments into Healstack and Sparkjar and shipped Weather, Fieldbook and Lucarne, a small web browser. Epiphany’s broker connection got stuck in a loop and used 480 thousand requests over a weekend, so I removed one line. I also posted a lost-cat listing for Vinney, an orange tabby last seen in Langley.</p>

<h2 id="sep-8-to-10">Sep 8 to 10</h2>

<p>I got my Canadian business number, which unlocks iPhone revenue. I also taught a program to play the Duolingo chess game by reading the page directly. It beat the bot and then played language lessons on its own all night. Epiphany for iPhone was approved with a paid daily summary. Voxprint and Epiphany Premium went on sale at $1, I scheduled Product Hunt launches for thirteen apps, and Windgate (the old Breathe) reached the App Store.</p>

<h2 id="sep-11-to-12">Sep 11 to 12</h2>

<p>I added Apple Watch apps to three apps, and sign-in with Google and Apple to nine. I made Siftbox, a mail app, out of a mail helper, and sent it to Apple. Conveyer, my Factorio-playing AI, got a live viewer and progress charts. My security watcher Tripwire can now write fixes for broken tests on its own. I cut Epiphany’s long instruction file from 630 lines to 32. The week ended with a cleanup across 50 projects and 180 changes.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[September: 30 apps live, paid apps on sale at $1, and a program that taught itself Duolingo chess.]]></summary></entry><entry><title type="html">Accurate</title><link href="https://journal.jaybulb.com/2026/08/24/the-picture-gets-accurate/" rel="alternate" type="text/html" title="Accurate" /><published>2026-08-24T12:00:00-07:00</published><updated>2026-08-24T12:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/08/24/the-picture-gets-accurate</id><content type="html" xml:base="https://journal.jaybulb.com/2026/08/24/the-picture-gets-accurate/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">Accurate</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">august: checking everything for real</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">read Apple's real rejection reasons</text>
  <text fill="currentColor" x="48" y="270" font-size="19">every old API key found dead</text>
  <text fill="currentColor" x="48" y="304" font-size="19">journal was not publishing, now fixed</text>
  <text fill="currentColor" x="48" y="338" font-size="19">two apps rebuilt as real native apps</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">apps with launch screens</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">19</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">lesson</text>
  <text fill="currentColor" x="584" y="340" font-size="16">check first</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-08-24</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/notes"><text fill="currentColor" x="48" y="157" font-size="14">notes</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">170</text>
<a href="https://github.com/nulljosh/hikko"><text fill="currentColor" x="48" y="183" font-size="14">hikko</text></a>
<rect x="150" y="172" width="186" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="344" y="183" font-size="14" opacity="0.6">93</text>
<a href="https://github.com/nulljosh/epiphany"><text fill="currentColor" x="48" y="209" font-size="14">epiphany</text></a>
<rect x="150" y="198" width="184" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="342" y="209" font-size="14" opacity="0.6">92</text>
<a href="https://github.com/nulljosh/bookrank"><text fill="currentColor" x="48" y="235" font-size="14">bookrank</text></a>
<rect x="150" y="224" width="164" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="322" y="235" font-size="14" opacity="0.6">82</text>
<a href="https://github.com/nulljosh/tonchi"><text fill="currentColor" x="48" y="261" font-size="14">tonchi</text></a>
<rect x="150" y="250" width="156" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="314" y="261" font-size="14" opacity="0.6">78</text>
<a href="https://github.com/nulljosh/intake"><text fill="currentColor" x="48" y="287" font-size="14">intake</text></a>
<rect x="150" y="276" width="122" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="280" y="287" font-size="14" opacity="0.6">61</text>
<rect x="48.0" y="382" width="11.0" height="2" fill="currentColor" opacity="0.5" />
<rect x="60.0" y="369" width="11.0" height="15" fill="currentColor" opacity="0.5" />
<rect x="72.0" y="362" width="11.0" height="22" fill="currentColor" opacity="0.5" />
<rect x="84.0" y="358" width="11.0" height="26" fill="currentColor" opacity="0.5" />
<rect x="96.0" y="383" width="11.0" height="1" fill="currentColor" opacity="0.5" />
<rect x="108.0" y="368" width="11.0" height="16" fill="currentColor" opacity="0.5" />
<rect x="120.0" y="379" width="11.0" height="5" fill="currentColor" opacity="0.5" />
<rect x="132.0" y="380" width="11.0" height="4" fill="currentColor" opacity="0.5" />
<rect x="144.0" y="371" width="11.0" height="13" fill="currentColor" opacity="0.5" />
<rect x="156.0" y="358" width="11.0" height="26" fill="currentColor" opacity="0.5" />
<rect x="168.0" y="366" width="11.0" height="18" fill="currentColor" opacity="0.5" />
<rect x="180.0" y="373" width="11.0" height="11" fill="currentColor" opacity="0.5" />
<rect x="192.0" y="374" width="11.0" height="10" fill="currentColor" opacity="0.5" />
<rect x="204.0" y="381" width="11.0" height="3" fill="currentColor" opacity="0.5" />
<rect x="216.0" y="381" width="11.0" height="3" fill="currentColor" opacity="0.5" />
<rect x="228.0" y="380" width="11.0" height="4" fill="currentColor" opacity="0.5" />
<rect x="240.0" y="369" width="11.0" height="15" fill="currentColor" opacity="0.5" />
<rect x="252.0" y="358" width="11.0" height="26" fill="currentColor" opacity="0.5" />
<rect x="264.0" y="354" width="11.0" height="30" fill="currentColor" opacity="0.5" />
<rect x="276.0" y="383" width="11.0" height="1" fill="currentColor" opacity="0.5" />
<rect x="288.0" y="382" width="11.0" height="2" fill="currentColor" opacity="0.5" />
<rect x="300.0" y="368" width="11.0" height="16" fill="currentColor" opacity="0.5" />
<rect x="312.0" y="367" width="11.0" height="17" fill="currentColor" opacity="0.5" />
<rect x="324.0" y="340" width="11.0" height="44" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 24 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">1146</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">26</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-08-01 to 2026-08-24</text>
</svg>

<h2 id="august">August</h2>

<p>August was the month I stopped trusting my own notes and checked everything against reality. I counted every project and found fifteen folders existing twice, plus a hidden copy of everything inside itself. Deleting it freed a gigabyte.</p>

<h2 id="what-apple-actually-said">What Apple actually said</h2>

<p>I read the real App Store rejection messages instead of guessing. Eight rejections came down to three causes: four were an account-wide block, three were sign-in failing during review, and one was the word Mac in an app name. Four apps I thought were waiting had been rejected weeks earlier. Lexly’s Mac version was blocked because books sold in China need a Chinese publishing license. I fixed it by dropping China from where the app is sold.</p>

<h2 id="things-that-said-done-but-werent">Things that said done but weren’t</h2>

<p>I fixed bugs in eleven projects that had never made my list. This journal was not even publishing: the deploy printed success, but it was sending to the wrong project, so the site sat weeks behind. Every API key on this computer turned out to be dead, because a key change months ago never reached the saved copies. Four book summaries became stubs because I deleted the source photos before checking them.</p>

<h2 id="what-did-ship">What did ship</h2>

<p>Apple called two apps too basic, so I rebuilt both as real native apps. Quotable became Quotestreak. Bookrank went live with a redesign. Inkpress went to the App Store with sixteen news feeds. GitHub sign-in reached Litigate, Lexly and Bookrank, and all nineteen apps got launch screens.</p>

<h2 id="working-smarter">Working smarter</h2>

<p>Running nine helpers at once made my computer crawl and burned my budget in minutes, so now it is two or three at most. I also cleaned up this journal: fourteen scattered entries became a few readable ones, with a check that blocks long or messy posts.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[August: I checked my notes against reality and found rejections, dead keys and a journal that was not publishing.]]></summary></entry><entry><title type="html">Renames</title><link href="https://journal.jaybulb.com/2026/07/31/a-summer-of-renames/" rel="alternate" type="text/html" title="Renames" /><published>2026-07-31T12:00:00-07:00</published><updated>2026-07-31T12:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/07/31/a-summer-of-renames</id><content type="html" xml:base="https://journal.jaybulb.com/2026/07/31/a-summer-of-renames/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">Renames</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">july: new names, quiet bugs fixed</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">Epiphany reached the App Store</text>
  <text fill="currentColor" x="48" y="270" font-size="19">half my apps got new names</text>
  <text fill="currentColor" x="48" y="304" font-size="19">ten real bugs and leaks fixed</text>
  <text fill="currentColor" x="48" y="338" font-size="19">Lexly free, Epiphany $1 unlock</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">renamed</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">6</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">still stuck</text>
  <text fill="currentColor" x="584" y="340" font-size="16">Apple signing</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-07-31</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/notes"><text fill="currentColor" x="48" y="157" font-size="14">notes</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">356</text>
<a href="https://github.com/nulljosh/inkpress"><text fill="currentColor" x="48" y="183" font-size="14">inkpress</text></a>
<rect x="150" y="172" width="302" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="460" y="183" font-size="14" opacity="0.6">316</text>
<a href="https://github.com/nulljosh/epiphany"><text fill="currentColor" x="48" y="209" font-size="14">epiphany</text></a>
<rect x="150" y="198" width="225" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="383" y="209" font-size="14" opacity="0.6">236</text>
<a href="https://github.com/nulljosh/talli"><text fill="currentColor" x="48" y="235" font-size="14">talli</text></a>
<rect x="150" y="224" width="170" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="328" y="235" font-size="14" opacity="0.6">178</text>
<a href="https://github.com/nulljosh/tonchi"><text fill="currentColor" x="48" y="261" font-size="14">tonchi</text></a>
<rect x="150" y="250" width="137" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="295" y="261" font-size="14" opacity="0.6">143</text>
<a href="https://github.com/nulljosh/nulljosh.github.io"><text fill="currentColor" x="48" y="287" font-size="14">nulljosh.github.io</text></a>
<rect x="150" y="276" width="122" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="280" y="287" font-size="14" opacity="0.6">128</text>
<rect x="48.0" y="382" width="10.2" height="2" fill="currentColor" opacity="0.5" />
<rect x="70.3" y="383" width="10.2" height="1" fill="currentColor" opacity="0.5" />
<rect x="103.9" y="382" width="10.2" height="2" fill="currentColor" opacity="0.5" />
<rect x="170.9" y="383" width="10.2" height="1" fill="currentColor" opacity="0.5" />
<rect x="204.4" y="380" width="10.2" height="4" fill="currentColor" opacity="0.5" />
<rect x="215.6" y="381" width="10.2" height="3" fill="currentColor" opacity="0.5" />
<rect x="226.8" y="383" width="10.2" height="1" fill="currentColor" opacity="0.5" />
<rect x="238.0" y="371" width="10.2" height="13" fill="currentColor" opacity="0.5" />
<rect x="249.1" y="376" width="10.2" height="8" fill="currentColor" opacity="0.5" />
<rect x="260.3" y="373" width="10.2" height="11" fill="currentColor" opacity="0.5" />
<rect x="271.5" y="381" width="10.2" height="3" fill="currentColor" opacity="0.5" />
<rect x="282.7" y="356" width="10.2" height="28" fill="currentColor" opacity="0.5" />
<rect x="293.8" y="364" width="10.2" height="20" fill="currentColor" opacity="0.5" />
<rect x="305.0" y="371" width="10.2" height="13" fill="currentColor" opacity="0.5" />
<rect x="316.2" y="374" width="10.2" height="10" fill="currentColor" opacity="0.5" />
<rect x="327.4" y="382" width="10.2" height="2" fill="currentColor" opacity="0.5" />
<rect x="349.7" y="383" width="10.2" height="1" fill="currentColor" opacity="0.5" />
<rect x="360.9" y="378" width="10.2" height="6" fill="currentColor" opacity="0.5" />
<rect x="372.1" y="357" width="10.2" height="27" fill="currentColor" opacity="0.5" />
<rect x="383.2" y="359" width="10.2" height="25" fill="currentColor" opacity="0.5" />
<rect x="394.4" y="375" width="10.2" height="9" fill="currentColor" opacity="0.5" />
<rect x="405.6" y="359" width="10.2" height="25" fill="currentColor" opacity="0.5" />
<rect x="416.8" y="361" width="10.2" height="23" fill="currentColor" opacity="0.5" />
<rect x="427.9" y="369" width="10.2" height="15" fill="currentColor" opacity="0.5" />
<rect x="439.1" y="359" width="10.2" height="25" fill="currentColor" opacity="0.5" />
<rect x="450.3" y="367" width="10.2" height="17" fill="currentColor" opacity="0.5" />
<rect x="461.5" y="358" width="10.2" height="26" fill="currentColor" opacity="0.5" />
<rect x="472.6" y="360" width="10.2" height="24" fill="currentColor" opacity="0.5" />
<rect x="483.8" y="379" width="10.2" height="5" fill="currentColor" opacity="0.5" />
<rect x="495.0" y="367" width="10.2" height="17" fill="currentColor" opacity="0.5" />
<rect x="506.2" y="369" width="10.2" height="15" fill="currentColor" opacity="0.5" />
<rect x="517.3" y="376" width="10.2" height="8" fill="currentColor" opacity="0.5" />
<rect x="528.5" y="372" width="10.2" height="12" fill="currentColor" opacity="0.5" />
<rect x="539.7" y="375" width="10.2" height="9" fill="currentColor" opacity="0.5" />
<rect x="550.9" y="342" width="10.2" height="42" fill="currentColor" opacity="0.5" />
<rect x="562.0" y="369" width="10.2" height="15" fill="currentColor" opacity="0.5" />
<rect x="573.2" y="376" width="10.2" height="8" fill="currentColor" opacity="0.5" />
<rect x="584.4" y="375" width="10.2" height="9" fill="currentColor" opacity="0.5" />
<rect x="595.6" y="348" width="10.2" height="36" fill="currentColor" opacity="0.5" />
<rect x="606.7" y="344" width="10.2" height="40" fill="currentColor" opacity="0.5" />
<rect x="617.9" y="360" width="10.2" height="24" fill="currentColor" opacity="0.5" />
<rect x="629.1" y="340" width="10.2" height="44" fill="currentColor" opacity="0.5" />
<rect x="640.3" y="365" width="10.2" height="19" fill="currentColor" opacity="0.5" />
<rect x="673.8" y="373" width="10.2" height="11" fill="currentColor" opacity="0.5" />
<rect x="685.0" y="356" width="10.2" height="28" fill="currentColor" opacity="0.5" />
<rect x="696.1" y="356" width="10.2" height="28" fill="currentColor" opacity="0.5" />
<rect x="707.3" y="359" width="10.2" height="25" fill="currentColor" opacity="0.5" />
<rect x="718.5" y="361" width="10.2" height="23" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 63 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">2084</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">21</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-05-30 to 2026-07-31</text>
</svg>

<h2 id="july">July</h2>

<p>Epiphany finally reached the App Store. After that I renamed half my apps. Dose is now Healstack, Lingo is Lexly, Books is Bookrank, Brief is Litigate, Grapher is Curvely, and Echo is Voxprint, because Apple said Echo was too generic. Each rename meant new icons and branding, and one name took twelve tries before it was accepted.</p>

<h2 id="quiet-bugs">Quiet bugs</h2>

<p>Most of my real work was fixing things that had been wrong for a long time without anyone noticing. Epiphany’s auto-trader never traded because it rounded small orders down to zero shares. Its net worth number left out cash sitting in investment accounts and showed $229 instead of $415. Talli’s messages tab was empty because of how it read dates, and Inkpress loaded blank entries.</p>

<h2 id="security">Security</h2>

<p>I checked fifteen projects and found ten real bugs. Voxprint gave paid features to everyone, and three apps had no way to delete your account, which Apple requires. Litigate was showing live court documents to anyone who asked, so I put it behind a real login. Sparkjar let any visitor read other users’ passwords and reset keys, so I locked that down.</p>

<h2 id="money-and-moving">Money and moving</h2>

<p>I made Lexly free, because the paywall never worked. Epiphany’s payments had been silently broken for months, so I fixed them and swapped the monthly plan for a $1 unlock. I also moved twelve projects and thirteen web addresses off my old host in one sitting.</p>

<h2 id="stuck-and-personal">Stuck and personal</h2>

<p>I lost most of a week to Apple’s signing system. Five apps could not upload and I could not fix it, so I am writing that down honestly. Two records requests on the 2021 case came back: the body camera footage never existed and the 911 recording was destroyed on schedule. I also fixed my resume, which wrongly said I was in university. I am self-taught, so now it leads with my eight apps. I saw Jayda for the first time in about ten years, and we spent three days together.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[July: Epiphany reached the App Store, half my apps got new names, and I fixed bugs and leaks nobody had noticed.]]></summary></entry><entry><title type="html">Spring</title><link href="https://journal.jaybulb.com/2026/05/29/winter-into-spring/" rel="alternate" type="text/html" title="Spring" /><published>2026-05-29T09:00:00-07:00</published><updated>2026-05-29T09:00:00-07:00</updated><id>https://journal.jaybulb.com/2026/05/29/winter-into-spring</id><content type="html" xml:base="https://journal.jaybulb.com/2026/05/29/winter-into-spring/"><![CDATA[<svg class="post-header-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 500" width="800" height="500">
  <rect fill="none" class="bg" width="800" height="500" />
  <rect class="brd" x="20" y="20" width="760" height="460" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="90" font-size="42" font-weight="300" letter-spacing="-1">Spring</text>
  <text fill="currentColor" x="48" y="126" font-size="16" opacity="0.6">feb to may: building my own operating system</text>

  <line stroke="currentColor" x1="48" y1="152" x2="752" y2="152" stroke-width="1" opacity="0.25" />

  <text fill="currentColor" x="48" y="188" font-size="16" opacity="0.6">what happened</text>

  <text fill="currentColor" x="48" y="236" font-size="19">my own operating system boots and takes commands</text>
  <text fill="currentColor" x="48" y="270" font-size="19">trading app grew from 58 to 100 assets</text>
  <text fill="currentColor" x="48" y="304" font-size="19">legal case app became a real Mac and iPhone app</text>
  <text fill="currentColor" x="48" y="338" font-size="19">projects cut from thirty to ten</text>

  <rect class="brd" x="560" y="176" width="200" height="280" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
  <text fill="currentColor" x="584" y="206" font-size="14" opacity="0.6">projects left</text>
  <text fill="currentColor" x="584" y="242" font-size="36" font-weight="500">10</text>
  <text fill="currentColor" x="584" y="318" font-size="14" opacity="0.6">next</text>
  <text fill="currentColor" x="584" y="340" font-size="16">finish school plans</text>
  <text fill="currentColor" x="584" y="362" font-size="16">keep building</text>
  <text fill="currentColor" x="584" y="384" font-size="16">stay steady</text>

  <text fill="currentColor" x="48" y="462" font-size="15" opacity="0.6">2026-05-29</text>
</svg>

<svg class="post-header-svg graph-svg" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 800 420" width="800" height="420">
<rect x="20" y="20" width="760" height="380" rx="12" ry="12" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="48" y="62" font-size="14" opacity="0.6">work</text>
<text fill="currentColor" x="48" y="96" font-size="28" font-weight="300" letter-spacing="-0.5">commits by project</text>
<line stroke="currentColor" x1="48" y1="118" x2="752" y2="118" stroke-width="1" opacity="0.25" />
<a href="https://github.com/nulljosh/talli"><text fill="currentColor" x="48" y="157" font-size="14">talli</text></a>
<rect x="150" y="146" width="340" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="498" y="157" font-size="14" opacity="0.6">86</text>
<a href="https://github.com/nulljosh/dotfiles"><text fill="currentColor" x="48" y="183" font-size="14">dotfiles</text></a>
<rect x="150" y="172" width="119" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="277" y="183" font-size="14" opacity="0.6">30</text>
<a href="https://github.com/nulljosh/notate"><text fill="currentColor" x="48" y="209" font-size="14">notate</text></a>
<rect x="150" y="198" width="83" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="241" y="209" font-size="14" opacity="0.6">21</text>
<a href="https://github.com/nulljosh/nulljosh.github.io"><text fill="currentColor" x="48" y="235" font-size="14">nulljosh.github.io</text></a>
<rect x="150" y="224" width="83" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="241" y="235" font-size="14" opacity="0.6">21</text>
<a href="https://github.com/nulljosh/blockframe"><text fill="currentColor" x="48" y="261" font-size="14">blockframe</text></a>
<rect x="150" y="250" width="47" height="14" rx="2" fill="currentColor" opacity="0.8" />
<text fill="currentColor" x="205" y="261" font-size="14" opacity="0.6">12</text>
<rect x="176.0" y="370" width="6.1" height="14" fill="currentColor" opacity="0.5" />
<rect x="183.1" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="254.2" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="268.4" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="275.6" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="289.8" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="311.1" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="325.3" y="380" width="6.1" height="4" fill="currentColor" opacity="0.5" />
<rect x="339.6" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="346.7" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="353.8" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="417.8" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="488.9" y="380" width="6.1" height="4" fill="currentColor" opacity="0.5" />
<rect x="496.0" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="517.3" y="380" width="6.1" height="4" fill="currentColor" opacity="0.5" />
<rect x="524.4" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="531.6" y="380" width="6.1" height="4" fill="currentColor" opacity="0.5" />
<rect x="538.7" y="372" width="6.1" height="12" fill="currentColor" opacity="0.5" />
<rect x="545.8" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="552.9" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="560.0" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="567.1" y="364" width="6.1" height="20" fill="currentColor" opacity="0.5" />
<rect x="574.2" y="376" width="6.1" height="8" fill="currentColor" opacity="0.5" />
<rect x="588.4" y="366" width="6.1" height="18" fill="currentColor" opacity="0.5" />
<rect x="602.7" y="372" width="6.1" height="12" fill="currentColor" opacity="0.5" />
<rect x="609.8" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="616.9" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="638.2" y="378" width="6.1" height="6" fill="currentColor" opacity="0.5" />
<rect x="645.3" y="374" width="6.1" height="10" fill="currentColor" opacity="0.5" />
<rect x="652.4" y="370" width="6.1" height="14" fill="currentColor" opacity="0.5" />
<rect x="659.6" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="673.8" y="376" width="6.1" height="8" fill="currentColor" opacity="0.5" />
<rect x="688.0" y="380" width="6.1" height="4" fill="currentColor" opacity="0.5" />
<rect x="695.1" y="370" width="6.1" height="14" fill="currentColor" opacity="0.5" />
<rect x="702.2" y="340" width="6.1" height="44" fill="currentColor" opacity="0.5" />
<rect x="709.3" y="374" width="6.1" height="10" fill="currentColor" opacity="0.5" />
<rect x="716.4" y="366" width="6.1" height="18" fill="currentColor" opacity="0.5" />
<rect x="723.6" y="382" width="6.1" height="2" fill="currentColor" opacity="0.5" />
<rect x="730.7" y="358" width="6.1" height="26" fill="currentColor" opacity="0.5" />
<rect x="737.8" y="374" width="6.1" height="10" fill="currentColor" opacity="0.5" />
<rect x="744.9" y="366" width="6.1" height="18" fill="currentColor" opacity="0.5" />
<text fill="currentColor" x="48" y="332" font-size="13" opacity="0.6">commits per day, 99 days</text>
<rect x="560" y="136" width="200" height="180" rx="8" ry="8" fill="none" stroke="currentColor" stroke-width="1" opacity="0.25" />
<text fill="currentColor" x="584" y="166" font-size="14" opacity="0.6">commits</text>
<text fill="currentColor" x="584" y="198" font-size="28" font-weight="500">170</text>
<text fill="currentColor" x="584" y="232" font-size="14" opacity="0.6">projects touched</text>
<text fill="currentColor" x="584" y="264" font-size="28" font-weight="500">5</text>
<text fill="currentColor" x="584" y="298" font-size="13" opacity="0.6">2026-02-20 to 2026-05-29</text>
</svg>

<h2 id="february">February</h2>

<p>I started building my own computer operating system from scratch. It now has a clock, a keyboard, text on the screen and a tiny command prompt, and it starts up inside a virtual computer. My stock-trading app grew from 58 things you can trade to 100, and it can now send orders to real brokers. I built Dose, a tracker for medicines and supplements, in one sitting. One 18-hour day went to a bug that had blocked logins for a week; a single missing setting was the cause.</p>

<p>The old dream came back, the one I have had since I was five. I am always chasing a faceless person down a hallway, and when I catch them they turn around and it is me. Then they chase me. I have no explanation after twenty years, so I just write it down. Building something big is the best way I know to stop thinking about myself.</p>

<h2 id="april">April</h2>

<p>I spent April building tools for the apps I already had. Epiphany, my markets and world map app, got live flights and wildfires and a chat panel. Spark and Tally now run on Mac and watch too. Arthur, a small AI I built from scratch, got small enough to run inside a web page. I also cut my projects from thirty-odd down to ten.</p>

<p>I made Quest, a to-do app where the characters in my Times Square city game do my real chores for points. My dad’s garage door shop got a proper dashboard with jobs, low-stock alerts and a PIN login. I also kept growing Life, the notes document I keep for Amanda.</p>

<h2 id="may">May</h2>

<p>May was mostly Brief, my legal case tool. It went from a rough web page to a real Mac and iPhone app in a week, and it now handles three cases. Tally got a new look and a way to translate its text. Charters, Echo (phone speech-to-text), Beep (a transit helper) and Grapher (a calculator) all went out. Midmonth I merged four projects into one, gave every web app the same cream and red look, and moved Epiphany off a data service that was shutting down.</p>

<h2 id="away-from-the-screen">Away from the screen</h2>

<p>I have gone to the gym three or four times a week since December and I am still in therapy. Pre-Calc test prep is always in the background. A two-hour call with Alex turned into our worst argument ever, about whether hitting kids builds character. I also decided on school: computer science, not paralegal.</p>]]></content><author><name>Joshua Trommel</name></author><category term="journal" /><category term="quarterly" /><summary type="html"><![CDATA[February to May: I started building my own operating system, grew my apps, and cut my projects from thirty to ten.]]></summary></entry></feed>