← The Journal
Products

Catchlight, where it stands

By Mark3 min read
A watchmaker's bench with a loupe, tweezers and a watch movement part way through a repair
Photo, Tima Miroshnichenko / Pexels

An honest progress report on the first Considus product. What is built, what got torn out and rebuilt, and why there is no date attached to any of it.

People keep asking when Catchlight is out, so this is the state of it.

Short version, it's further along than it looks from outside and it doesn't have a date. The longer version is more useful.

What it is

Notes, tasks and reminders in one place on iPhone. Not three apps that sync, not a notes app with a checkbox bolted on. One thing you write into, where a line becomes a task or a reminder because you said so, and stays where you put it.

Everything is encrypted on the device using AES-256-GCM and the key is derived from a 12-word Privacy phrase generated on your phone during setup. This key is then held in the iOS Keychain, protected by the phone's hardware and software security. There is no account. You don't sign up, you don't give an email address, and there's no server holding a copy of anything, because there's no server.

It works with no signal at all. Offline isn't a mode it degrades into, it's the normal state, and the network is the optional extra.

Sync is optional and you point it somewhere yourself. Turn it on and your encrypted data is written into a folder in iCloud Drive or Dropbox that belongs to you. It's encrypted before it leaves the phone, so the folder only holds cipher-text and your provider only holds cipher-text. I don't have access to your folder and nobody else should have access either, but even if someone does get into it they won't be able to read anything. Just like your cloud provider, they'll need your Privacy phrase to do that. Your Privacy phrase is what keeps your information safe in your folder.

The whole thing is open source too, so if any sentence above turns out to be less than honest, the code is there for someone to catch me on it.

The part that got torn out

The editor and the timeline were originally SwiftUI, and there was a bug where the text caret would end up underneath the keyboard while you were typing. Not always, and not in the simulator, which is its own kind of annoying.

I fixed it four times. Every fix worked for the case in front of me and then something adjacent broke, which is the tell that you're patching a symptom of something structural. The real answer was that the layout was being decided in a place that couldn't know where the keyboard was.

Both screens were rewritten in UIKit. That's months of work to arrive at a screen that looks identical to the one before it, and the caret problem is gone as a category rather than as a bug. I'd rather do that once than keep taping over it.

One lesson I should have learned sooner though. The rewrite sat behind a switch, so the old path and the new one could run side by side, and that defaulted to off, which meant the automated tests ran the old code for six milestones without anyone noticing. When you build the safety switch, make sure the tests are on the side of it you actually care about.

What's honest about the state of it

The encryption, the storage, the reminders including the recurring and place-based ones, the widgets, Shortcuts, the search, the lock screen, the sync round trip, the export, all of that is built and used every day, by me, with my real notes in it. I've been living in it since June, which is the only reason I trust any of it.

There's a list of things that aren't right yet, and it isn't short. Some of it is polish, some of it is behaviour I only found because I use it daily and the thing you use daily is the thing whose sharp edges you find.

Why there's no date

Because I'd have to make one up.

There's no investor asking, no launch window that some spend is booked against, and nothing about this month is better to ship in than next month. The only thing a date would do is create a reason to ship something I know isn't finished, and the entire argument for a studio this size is that nothing forces that.

It goes out when I'd be happy for someone who paid for it to open it for the first time. If you want to know when that is, the waitlist is the only place I'll say it.