← All posts

Two rebuilds, one Mac app.

In August I said the Mac app must be completely native Apple. In late September I changed the plan. Both calls were right.

On August 8th I wrote down exactly how I felt about the Mac app, because I didn't want to round it off later. I called it not cohesive, clunky, cheesy, and inconsistent. And the target, in the same breath: it should feel as if Apple built each part of it.

The first rebuild

The problem wasn't colors or spacing. The Mac window was a hand-built imitation of a control that macOS already provides for exactly this kind of app: a sidebar on the left, content on the right. About 730 lines of custom code were doing a job the system does for free. I'd spent two days polishing individual screens before I realized no amount of polish fixes a structure that fights the platform. So the rule became simple: don't hand-build what macOS gives you. By three weeks in, the custom panel code and its sixteen tests were deleted, and the window used Apple's own sidebar layout.

The second call

Then, on September 28th, I changed the plan again. Not because the native version had failed, but because something better showed up once I had a comparison. Neeos already had a mature iPad app, and Apple lets that same app run on the Mac, scaled to a Mac window. My words: it works better for Neeos, and it's easier to design. I confirmed it again on October 1st.

What that means: instead of two separate apps trying to agree with each other, one codebase now carries the iPhone, iPad, and Mac, with a thin layer of Mac-specific touches on top: a menu bar, a keyboard shortcut you can use anywhere, Open With, and Finder integration.

Landing it without losing anything

Merging the two lines of work meant resolving real conflicts across fifteen files, by hand, against the actual code on both sides.

The Mac app is still on its way to people. Nothing here changes that, but it does change how it will get there.

Written October 21, 2026 from the build log, and dated to when this happened.

← Newer: I made chat worse. Here's how we fixed it. Older: Two versions of one app →