<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>JHOOX</title><description>Notes from building a small software company: the AI and SaaS tools I test, the decisions behind each release, and what the numbers did afterwards.</description><link>https://www.jhoox.com/</link><language>en</language><item><title>My app kept rescheduling alarms that were already ringing</title><link>https://www.jhoox.com/blog/rescheduling-an-alarm-that-was-already-ringing/</link><guid isPermaLink="true">https://www.jhoox.com/blog/rescheduling-an-alarm-that-was-already-ringing/</guid><description>Returning to the foreground made RYZA re-sync its alarm schedule, including the one alerting on the lock screen at that moment. Repair work is still work.</description><pubDate>Thu, 13 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item><item><title>After a reboot, iOS would not let my app read its own data</title><link>https://www.jhoox.com/blog/ios-reboot-protected-data-empty-database/</link><guid isPermaLink="true">https://www.jhoox.com/blog/ios-reboot-protected-data-empty-database/</guid><description>The alarm fired but the voice mission did not open. The app was reading its own storage before the first unlock and trusting the empty answer it got back.</description><pubDate>Wed, 12 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item><item><title>Does moving to Astro actually make a site faster? I measured mine</title><link>https://www.jhoox.com/blog/astro-rebuild-what-actually-moved/</link><guid isPermaLink="true">https://www.jhoox.com/blog/astro-rebuild-what-actually-moved/</guid><description>Same content, same host, hand-written HTML replaced by a static site generator. The framework saved 400 bytes. Something else saved six megabytes.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item><item><title>App Store keywords are 100 bytes, not 100 characters</title><link>https://www.jhoox.com/blog/app-store-keywords-are-bytes-not-characters/</link><guid isPermaLink="true">https://www.jhoox.com/blog/app-store-keywords-are-bytes-not-characters/</guid><description>A Korean syllable costs three bytes and an English letter costs one, so the keyword field should punish Korean badly. I measured mine and it barely does.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>Growth</category><author>J-HooX</author></item><item><title>A blank line inside inline SVG will silently delete half your diagram</title><link>https://www.jhoox.com/blog/svg-in-markdown-blank-lines/</link><guid isPermaLink="true">https://www.jhoox.com/blog/svg-in-markdown-blank-lines/</guid><description>Markdown ends a raw HTML block at the first empty line. My diagram lost five of six shapes and still rendered, so nothing errored and nothing looked broken.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item><item><title>Why exact speech matching breaks voice apps, and what I do instead</title><link>https://www.jhoox.com/blog/exact-speech-matching-breaks-voice-apps/</link><guid isPermaLink="true">https://www.jhoox.com/blog/exact-speech-matching-breaks-voice-apps/</guid><description>Recognition is wrong often enough that word-for-word matching punishes the user for the recognizer&apos;s mistakes. Here is what I score instead.</description><pubDate>Tue, 11 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item><item><title>Can AlarmKit enforce a custom dismiss flow? No, and here is why</title><link>https://www.jhoox.com/blog/alarmkit-stop-button-blocker/</link><guid isPermaLink="true">https://www.jhoox.com/blog/alarmkit-stop-button-blocker/</guid><description>AlarmKit wakes the phone through Silent Mode but lets anyone stop it in one tap, which was the whole product. I rejected it in May and shipped it in August.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><category>Build</category><author>J-HooX</author></item></channel></rss>