MY OWN TEXTING · MESSAGE 04 · VERSION ZERO

The fastest way to learn what you want is to use something that isn't it.

The question

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 “so I don’t have to deal with a weird app.” That works for alerts. It’s miserable for actual conversations with forty different people.

So at 3:29 that afternoon:

Sep 15 · 3:29 PM
Me → OrionIs there a way to have a Google Voice-like texting app on my phone?

Orion came back with a short list of open-source options. Fifteen minutes later:

Sep 15 · 3:45 PM
Me → OrionPrivacy app: modify it… Don’t ask me any questions. Do it.

Forking an open-source app

Orion found VoIPSuite-Mobile, an open-source texting app from a privacy project. It’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 KCCS Text.

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 “business hub” growing next to it on the server. For a forked weekend project, that’s fast.

Then I actually used it all day.

Bug one: the silent alarm

The point of a texting app is knowing when a text arrives. On September 17 we found that Android had been quietly marking every single notification from the app as SILENT. The notification channels had been created with sound and vibration off, and once Android creates a channel, the app can’t simply change it later.

The fix was new channels with new IDs, plus a lesson I’d keep relearning for the rest of this project: on Android, notification settings are sticky. If you get them wrong on the first install, you have to version your way out.

Bug two: the text eater

The one that drove me nuts showed up the next day:

Sep 18
Me → OrionLook into the [KCCS Text] app. When I’m typing on it on my Pixel 7, it keeps erasing stuff.

Here’s what was going on. The app checked the server for new messages every 10 seconds, and each check redrew the screen, including the box I was typing in. Phone keyboards keep a little “work in progress” 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.

Orion’s answer was a redesign, version 0.6.1. When Leo reviewed it, it caught a trap: the “new” version had the same internal version number 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.

The audit

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.

Leo’s audit was blunt:

  • The whole app was one giant file on a React Native version from 2022.
  • There were three copies of the code drifting apart in different folders.
  • The 10-second polling was the root of the typing bug, the battery drain and the slow delivery.
  • Patching it would mean fighting an old framework forever.

The recommendation: freeze the old app, stop polling, and rebuild around a server that pushes new messages the instant they arrive. That’s message 05.