Two of those are shipping, the browser console and the API behind it. The desktop and mobile packages are where the same console gets wrapped for other surfaces, one of them an experiment I just ran, the other the one that matters. None of them is a second build of the product.
Cheap experiments are one of the quiet advantages of building this way. When a new surface costs a shell instead of a rewrite, you can afford to find out whether it matters instead of arguing about it.
This week I got the Giant Context console running as a native desktop app, in its own window, out of the browser entirely. But I didn't ship it. There is no download, no release pipeline, no icon in anyone's dock but mine. It worked and then I stopped.
Giant Context has always been an API-first platform. The console is a single-page app that talks to the API and holds no special knowledge of its own, because the architecture put the API at the center and made every screen a replaceable satellite of it.
API-first means the presentation layer is disposable. If the way I render the console today turns out to be wrong for some surface, I can throw that layer away and build a different one, native or otherwise, without touching the backend that holds all the actual work. The decoupling is insurance, but playing with desktop, and eventually mobile, still gives me a chance to see whether different channels work.
Because the console depends on nothing but the API, the cheapest thing to try first is obvious. Wrap the existing web app in a native window and see if it is good enough. If it is, a desktop app cost me a shell. If it is not, I have lost nothing, because the same architecture that let me try the cheap version is the one that would let me build a real native version later, and the backend would not notice either way. I am trying the easy path first precisely because failing at it is free.
The repository has had the packages for both bets since its second week:
One console, four frames
packages/ core/ the console (the SPA) web/ it, in a browser tab desktop/ it, in a native macOS window mobile/ it, wrapped for iOS and AndroidI do not know if the desktop app matters.
The big AI products all shipped desktop apps recently, and there is a theory that an icon in the dock makes a tool stickier than a bookmark, that people return to what sits on their machine. Maybe. I do not have data, and I am not going to pretend a solo founder's hunch about stickiness is a strategy. The desktop app was cheap to try because of the architecture, so I tried it. If it earns its place, good. If not, it cost me a shell.
The mobile app is not a bet. It is a requirement.
Giant Context is being built to do your marketing for you, rather than to give you tools that do it faster. It notices what your company needs said and generates the pages, the campaigns, the posts that say it. But it will never publish a word without your yes. Everything it produces is a proposal you accept or reject. That approval step is half the product. Giant Context does the thinking, you do the approving.
The platform runs around the clock and everything it makes waits on your yes. If that yes lives in a browser on a desk, Giant Context becomes one more dashboard you forget to open, and a marketing engine you forget to check does nothing. The approval has to reach you where you already are. That place is your phone.
So the mobile app is the point where the product meets a human's day. A notification arrives. Giant Context has drafted next week's campaign. You are in line for coffee. You read it, you tap approve, and it ships, or you tap reject and it tries again. Your marketing advanced while you waited for an espresso.
This is also where a decision from two months ago turns out to have been about this all along.
When I built the invitation feature, sending one email forced me to build a whole notifications system, a provider-agnostic layer that every part of the platform could speak through. At the time it looked like over-engineering for a feature that just needed to send a link. It was not. Email was only the first channel. The reason notifications became their own system, rather than a function that sends mail, is that the platform was always going to need to reach a person through whatever channel they actually watch. Email today. A push to a phone the moment the mobile app is real. The invitation email and the campaign-approval push are the same system using two channels.
The experiment ran on a technology I already have doubts about. Electron ships a browser engine inside every app, which is how a simple console window becomes a bundle measured in hundreds of megabytes. It got the console into a native window fast, which is exactly what a research spike is for, and it also offends the part of me that spent this project keeping things lean. If a desktop app ever becomes real here, I doubt it will be Electron that ships it. There is a lighter way to wrap a web app in a native shell, and I have started looking at it.
For now the lesson stands on its own. Build the product once, behind an API, so the presentation layer owes nothing to any single screen. Then the question of desktop, mobile, or a surface that does not exist yet stops being a rewrite and becomes a frame. Most of them you will try because they are cheap. One of them, for this platform the phone in your pocket, turns out to be the whole point.
If you're interested in my work or Giant Context, contact me!