<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Open Source on ErrorZap</title><link>https://errorzap.com/tags/open-source/</link><description>Recent content in Open Source on ErrorZap</description><image><title>ErrorZap</title><url>https://errorzap.com/og.png</url><link>https://errorzap.com/og.png</link></image><generator>Hugo</generator><language>en-US</language><copyright>ErrorZap</copyright><lastBuildDate>Fri, 02 Oct 2026 23:34:00 -0600</lastBuildDate><atom:link href="https://errorzap.com/tags/open-source/index.xml" rel="self" type="application/rss+xml"/><item><title>Six Hours Later: The First App</title><link>https://errorzap.com/texting/first-app/</link><pubDate>Fri, 02 Oct 2026 23:34:00 -0600</pubDate><guid>https://errorzap.com/texting/first-app/</guid><description>The first KCCS Text app was a fork of an open-source VoIP app. It got texts onto my phone fast. Then it started eating what I typed.</description><content:encoded><![CDATA[<div class="ez-dossier-lede"><span>MY OWN TEXTING · MESSAGE 04 · VERSION ZERO</span><p>The fastest way to learn what you want is to use something that isn't it.</p></div>
<h2 id="the-question">The question</h2>
<p>My first instinct on port day was to skip apps entirely. I live in Telegram, so I
asked for a bot that would let me text through it &ldquo;so I don&rsquo;t have to deal with a
weird app.&rdquo; That works for alerts. It&rsquo;s miserable for actual conversations with
forty different people.</p>
<p>So at 3:29 that afternoon:</p>
<figure class="tx-thread" role="group" aria-label="Sep 15 · 3:29 PM"><div class="tx-thread-head">Sep 15 · 3:29 PM</div>
  <span class="tx-b me"><small>Me → Orion</small>Is there a way to have a Google Voice-like texting app on my phone?</span>
</figure>

<p>Orion came back with a short list of open-source options. Fifteen minutes later:</p>
<figure class="tx-thread" role="group" aria-label="Sep 15 · 3:45 PM"><div class="tx-thread-head">Sep 15 · 3:45 PM</div>
  <span class="tx-b me"><small>Me → Orion</small>Privacy app: modify it… Don&rsquo;t ask me any questions. Do it.</span>
</figure>

<h2 id="forking-an-open-source-app">Forking an open-source app</h2>
<p>Orion found <strong>VoIPSuite-Mobile</strong>, an open-source texting app from a privacy project.
It&rsquo;s built in React Native, and it already knew how to talk to a VoIP carrier.
Orion forked it, pointed it at my own server, and named it <strong>KCCS Text</strong>.</p>
<p>Within two days it was on both of my phones. By September 17 it was at version
0.7.0, with a desktop-and-mobile &ldquo;business hub&rdquo; growing next to it on the server.
For a forked weekend project, that&rsquo;s fast.</p>
<p>Then I actually used it all day.</p>
<h2 id="bug-one-the-silent-alarm">Bug one: the silent alarm</h2>
<p>The point of a texting app is knowing when a text arrives. On September 17 we found
that Android had been quietly marking <strong>every single notification from the app as
SILENT</strong>. The notification channels had been created with sound and vibration
off, and once Android creates a channel, the app can&rsquo;t simply change it later.</p>
<p>The fix was new channels with new IDs, plus a lesson I&rsquo;d keep relearning for the
rest of this project: <strong>on Android, notification settings are sticky.</strong> If you get
them wrong on the first install, you have to version your way out.</p>
<h2 id="bug-two-the-text-eater">Bug two: the text eater</h2>
<p>The one that drove me nuts showed up the next day:</p>
<figure class="tx-thread" role="group" aria-label="Sep 18"><div class="tx-thread-head">Sep 18</div>
  <span class="tx-b me"><small>Me → Orion</small>Look into the [KCCS Text] app. When I&rsquo;m typing on it on my Pixel 7, it keeps erasing stuff.</span>
</figure>

<p>Here&rsquo;s what was going on. The app checked the server for new messages <strong>every 10
seconds</strong>, and each check redrew the screen, including the box I was typing in.
Phone keyboards keep a little &ldquo;work in progress&rdquo; state while you type (the word
being autocorrected, the swipe in flight). Redraw the box under it and the keyboard
loses its place. Letters vanish. Sometimes a whole sentence.</p>
<p>Orion&rsquo;s answer was a redesign, version 0.6.1. When Leo reviewed it, it caught a
trap: the &ldquo;new&rdquo; version had the <strong>same internal version
number</strong> as the 0.7.0 already installed, and it was missing picture messages and
saved drafts. Installed over the top, it would have been a downgrade wearing a
new coat of paint.</p>
<h2 id="the-audit">The audit</h2>
<p>That night I told Leo what I really wanted. Roughly: make this the ultimate texting
app for my number, not a half-baked thing I can kind of put up with.</p>
<p>Leo&rsquo;s audit was blunt:</p>
<ul>
<li>The whole app was <strong>one giant file</strong> on a React Native version from 2022.</li>
<li>There were <strong>three copies</strong> of the code drifting apart in different folders.</li>
<li>The <strong>10-second polling</strong> was the root of the typing bug, the battery drain <em>and</em>
the slow delivery.</li>
<li>Patching it would mean fighting an old framework forever.</li>
</ul>
<p>The recommendation: freeze the old app, stop polling, and rebuild around a server
that <strong>pushes</strong> new messages the instant they arrive. That&rsquo;s message 05.</p>
]]></content:encoded></item></channel></rss>