Writing ·

AI won't replace your design process

I'd never built an app before AI tools. I built Contrrrol, a Mac app, with the same design process I've used my entire career.

I have ten apps on the App Store, and I manage all of them in App Store Connect, which is Apple's website for uploading builds, writing store pages and releasing updates. Apple also has an API for almost everything in there, so other software can do the same work. I wanted a native Mac app on top of it so I could see where every app stood and make changes in one place.

I built it with Claude Code over about three days and called it Contrrrol. All my apps have tripled letters in their names, so that isn't a typo.

I started by building

The first version came together in an evening. It was read-only, with a sidebar of apps and versions, the screenshots and store text for each version, and a preview of the product page. I added customer reviews about 40 minutes later.

The screens worked, but they weren't what I wanted. Each one looked a little different from the last, and a lot of them looked obviously AI-generated. We were also designing without knowing what App Store Connect could support.

An early Contrrrol screen for squiiish showing 4.6 stars from 1,284 ratings, a bar for each star level, and a list of written reviews in English and Japanese.
One of the first-evening screens, customer reviews, filled with sample data.

So less than two hours in, I sent the agent through Apple's API documentation to map what was possible. It came back as a table with one row per feature and a link to Apple's docs on each row. It also made read-only calls against my account to see what data I had.

The map turned up a few things that changed the app.

The map also showed that most of my real data was in TestFlight, Apple's beta testing service, with 118 builds across my apps. We built those screens next, and then I stopped adding screens.

Wireframes before code

We talked through what the app should be, and the agent drew wireframes, which are simple layouts of each screen without color or polish. Each one covered a kind of screen the app would need over and over, like a list with details on the side, so every screen built from it would work the same way. They used my real apps in their real states. sliiime was approved and waiting for me to release it, and Riiiff was rejected. By the end of the first night there were 13 of them, each reviewed three times, and I locked them as the plan to build against.

The first night

The agents built the first set of screens overnight. The report waiting for me in the morning said, "I haven't launched it, so try it before you call any feature done." So I used it, and then had agents review it and a second set check their findings. The review opened with "Nothing is built yet. You pick," meaning none of the fixes had been made and the choice was mine. That morning the agent also drew a second round of 86 wireframes covering more of the app.

Two rules

Also that morning, I gave the agent two rules for the whole app.

One was about capability. In my words at the time, "we can upload, edit, change, preview all of everything we do." If the API can do something, the app should too. When it can't, the screen says so and links out to App Store Connect.

The other was that every change goes into a local draft on my Mac, and nothing gets sent to Apple until I review it and press Publish. Screenshots upload in the background as soon as you add them, so Publish only has to put them in place.

The Review and Publish sheet for squiiish. Promotional Text goes from empty to a new line about an underwater world and a new garden, a Secondary Category change is held until 1.0 is released, and the button reads Publish 1 Change, 1 Live Now.
Review and Publish shows each change before and after. Nothing goes to Apple until I press Publish.

Checking the wireframes

Then a group of agents critiqued the new wireframes, and another agent checked each finding. Of 71 findings, 55 held up, 15 were partly right and 1 was wrong. The check told me which ones to read closely before acting on them.

Some of the wireframes had been drawn before the rules. They still saved page by page, and nine buttons still sent changes straight to Apple, including Generate Codes, Start Test and Turn Off Offer Code.

I had to decide which of those could wait for Publish. The critique proposed a rule, and I took it because it was easy to understand and made the rest of the app simpler. Anything that happens on Apple's side, like starting a test or generating a batch of codes, stays immediate behind a confirm. Edits to text, images and settings go into the draft. Turning off an offer code was the clearest case. If a code leaks, stopping it can't wait until I'm ready to publish everything else.

How the build ran

From there the plan was split into phases, 12 by the end, and some ran side by side. In each one, a few agents built separate pieces in their own copies of the code, and the agent I was talking to merged them. One reviewer read the code without seeing the builders' notes, another compared screenshots to the wireframes, and a third agent checked both reviews before anything got fixed.

I'd use what was built and give feedback. If the problem was in the design we redrew the wireframe before touching code, and anything else went into the next round of fixes.

Settings was one I sent back. We'd built it as one long page with 19 rows, more than anyone would want to read through. We redrew it as wireframes first, and it became four short tabs for General, API Key, Analytics and Agents.

A wireframe comparing the old one-page Settings window with the four new tabs, plus a before and after table.
The Settings wireframe, with the old 19-row page on the left and the four tabs that replaced it. Key IDs and app names are blanked out.

Letting my agents use the app

On the last day I added a way for my agents to use Contrrrol directly. It's an MCP server, which is the standard way tools like Claude Code and Codex connect to other apps.

An agent can read what Contrrrol knows about an app, like the saved store text, character limits and languages. Because every change already went through the draft, the agent didn't need its own way to save. If I ask it to write the What's New for a release, which is the release notes on the store page, the text lands in the same draft as mine. It can't publish. I review the before and after and press Publish myself.

The sliiice version page. Promotional Text reads 'MCP live test: new squish modes and faster saving.' and is marked Edited, and a bar at the bottom shows one unpublished change.
Promotional text an agent wrote over MCP during a test. It sits in my draft like my own edits.

Contrrrol started as a way to see if I could build something like this at all. The more we went through the process, the better it held up, and the app ended up fairly polished. With a handful of tweaks, I think it could be useful to other people who ship apps.

I also built it because shipping to the App Store is more complicated than I expected, and there was a lot of it I didn't understand. I want Contrrrol to make that simpler, so it's easier to ship what I want to make, and then to track how each app is doing and hopefully grow its users.

  • Default
  • Clear dark
  • Tinted dark
  • Tinted light
The Contrrrol icon in Apple's icon styles.