← All posts

The cut, and everything it changed.

Neeos got smaller on purpose. Then the identity, the homepage, and the way the product talks about itself all had to become honest about what was left. Three days, roughly in order.

Most entries here are about one bug, or one feature, on one day. This one covers three days, because they were one decision working its way outward: first through the product, then through the brand, then through every page of the site that describes either.

The cut

It started with a sentence I wrote myself, on the day I made the call:

"Right now I am trying to maintain a FAR too large product. Overpromising. To get to market we need to cut Neeos down to its roots, and the root is clear: the semantic index. That's the product."

The evidence behind it was a census, not a taste judgment. Across every account on the system: zero rows in the music tables. No plants entered in any volume. A sharing feature that had been fully built, fully tested, and used by nobody, ever — because Neeos is single-player, and a document-sharing feature is a strange thing to bolt onto software built around one account's own life. Music, Eden, Hearth, Odyssey, and Kin are gone as screens — not deleted, just switched off, because a module earns a place in the app by being how material actually gets in, and none of those were. Atlas, the money side, is different: it's paused, not cut. Existing users keep their data through a connection in Settings, the same way Apple Health or WHOOP works, and it comes back properly once the core is right.

What's left is eight surfaces: Chat, Vault, Notes, Projects, Soma (health), Momentum (goals and tasks), You, and Settings. That's a much smaller app than the one I was describing to people a month ago. It's also the first version of Neeos I'd actually stand behind every claim about.

The harder cut: staying Apple-only

The module cut was about what the app does. This one is about who can run it, and it cost more to hold to. The instruction I gave myself, the same week as the product cut:

"Completely at home on iPhone, iPad, and Mac."

The cheap way to reach more people is well understood: one React Native or Flutter codebase, ship it everywhere, pick up Android and Windows for a fraction of the engineering cost of building three real native apps. I'm not doing that, and it isn't free — it's a real reduction in who can use this thing, done on purpose, against the instinct of anyone trying to grow a small user base.

What it buys instead: no shared UI stretched across three screens and fitting none of them well. The iPad answers the pointer because it's built for one; the Mac gets real menus and window behavior instead of a phone screen in a box; SF Symbols is the only icon set, so nothing fights the system's own visual language. And there's no web client at all — the architecture page says so plainly, because it's true, not an oversight. A product whose entire pitch is "hand me the documents you'd never paste into a general chat box" doesn't get to ask for that kind of trust from behind a UI that merely resembles the platform it's running on. It has to actually be the platform's own idiom, built by someone who lives on it too — or the trust it's asking for isn't earned, it's performed.

The brand didn't survive first contact with its own author

With the product cut down, the marketing site needed rebuilding anyway — so I used the moment to fix something that had been bothering me for longer: the site's whole identity was built around a living sky, computed from the real sun and season, that I'd put on the homepage because it was the most distinctive thing the app did. I'd also quietly stopped using it myself, weeks earlier, switching my own daily driver to the plain background. When I said why, out loud, it became the correction:

"I think the living sky, even the gradient, is too much and too distracting... I don't think that can be the core of the identity, it's exhausting."

Distinctive in a demo and livable at hour six turned out to be two different tests, and only one of them matters for something you look at every day. The sky is retired from the brand entirely now — not demoted, retired — and the identity rebuilt on what I'd actually chosen: a quiet, near-neutral ground, with life expressed in the details instead of the environment. Rounded type took the same correction a day later, for the same reason: headlines set in the app's rounded display face looked warm in one hero image and cheap across a whole page of them, so rounded is reserved now for exactly two things — the wordmark, and numerals.

The color the site wears isn't the brand's — it's yours

The app got its own native reskin around the same time, and it shipped with something the site didn't have yet: a real accent picker, eight earth tones plus system blue, defaulting to Moss. The site had been using an invented blue — never shipped anywhere in the app — for every link and button. That's backwards for a product whose whole pitch is that it defers to what's actually real, so the invented color is gone, and the site's interaction accent is now the app's own default. Then, because it seemed like it should exist once the token system supported it: the site now samples one of the app's eight accents on every visit, the way a person picking their own color actually would. Refresh it a few times and it changes its whole personality without changing a single word.

A page for people who are going to check anyway

The privacy policy is a legal document, and it reads like one. The people this product is actually for — the ones with a filing cabinet's worth of documents they'd never hand to a general chat box — read past legal documents looking for the mechanism. So /architecture exists now: what model builds the index, what exactly leaves the system to answer a question and what never does, and — the part that matters most on a page like this — what the architecture is not. It says plainly that chat isn't local, because it isn't, and that there's no end-to-end encryption yet, because there isn't. Neeos can technically read what's stored today. That's the real boundary, named instead of blurred, and I'd rather a technical reader find that stated on the page than discover it themselves and wonder what else wasn't said.

What the numbers on the homepage actually are

The proof section near the top of the homepage — 12,166 documents, 10,009 health entries — isn't a customer count dressed up. It's the live production system, measured the same week this was written, because I use it. That's also true of most of the scroll demos further down: the "am I ready for the half marathon" exchange, the note edit pulling from a document, the road-trip plan that notices the car's overdue for an oil change — those are illustrative conversations built to show the actual retrieval mechanism honestly, not real exchanges, but the mechanism they're showing isn't a mockup. It's what's running.

Where it landed

Site's live at neeos.ai. Search Console has the sitemap, and — since this product's other audience is AI systems trying to answer "what is Neeos" — robots.txt now says explicitly, by name, that GPTBot, ClaudeBot, PerplexityBot and the rest are welcome, not just covered by a wildcard nobody reads. First post went out from @neeosai. None of it claims anything the app on my own phone doesn't already do — which, after a month of maintaining a product I was overpromising, was the actual point of the last three days.

← Newer: A page about me, and a roadmap that stopped hedging Older: The day the note format changed →