Robert van Klinken

Designing and building a lightweight iOS browser with Claude Code

I built a lightweight iOS browser in a few days using Claude Code. It started as an experiment just to see how far I could get by simply talking to my computer. My goal was to build a lightweight, private browser for iOS 26. Along the way, it turned out to be a surprisingly effective way to learn about iOS interaction patterns, animations, and product decisions.

Brainstorming with Claude

Having worked primarily as a designer, I knew I wasn't in the best position to make implementation level decisions. Luckily, with Claude Opus 4.5, I'd only have to ask the right questions.

Instead of trying to code my way through it, I leaned heavily on asking questions. Every time I wanted to add a feature, I switched Claude into plan mode and treated it like a research assistant. I'd ask how similar apps approach a problem, or which patterns iOS expects in a given situation.

Claude would go off and research competitors, read documentation, explain trade-offs, and then suggest approaches that actually made sense for my project. In hindsight, the time spent here paid off far more than pushing ahead and fixing things later.

Adding the privacy protections

Once basic navigation and search were working, it was time to add privacy protection. Again, I started by asking questions rather than jumping straight into building. In plan mode, I had Claude research how other browsers handle privacy protection, read blog posts, and propose solutions that fit the scope of this project.

It didn't work right away. There were issues with URL formatting and a few things broke along the way. I didn't step in though. I let Claude iterate until it worked. Once it did, it opened the simulator, ran the fingerprint test on coveryourtracks.eff.org, and showed me the result.

I settled on DuckDuckGo's Tracker Radar and EasyPrivacy, and used the same approach for ad blocking and hiding cookie banners.

Running into transition issues

For the tab interface I wanted a layout inspired by the system iOS app switcher, similar to what Arc does on iOS. That turned out to be more ambitious than expected.

Custom transitions at that level were complex and required more hand holding than I could provide. I struggled to get the web view to animate nicely in and out of the horizontal card grid. After a lot of back and forth, I decided it wasn't worth pushing further and opted for a simpler approach.

I ended up using ZoomNavigationTransition and went with a card based layout. It worked immediately. With very custom animations and little documentation, prompting your way to a good result is hard. More established patterns simply have more resources behind them, and the models seem to handle those far better.

Using it for a few days

The biggest advantage was having a working build on my phone from day one. That made it easy to continuously adjust and fine-tune things throughout the week.

Small bits of friction became annoying very quickly. Things that felt fine on day one started to feel off by day three. I also learned that the way Liquid Glass behaves is much more complex than I initially thought. When I ran into those moments, I'd loop in a more specialized agent via axiom:ask to help me understand what was happening and tweak it to my liking. This is something I'd never get out of designing in Figma.

What I'd do differently next time

First, I'd set stricter scope and clearer do's and don'ts early on in claude.md. I lost time because Claude tried to optimize for older iOS versions and avoided newer SwiftUI frameworks. At first it even assumed iOS 26 was still in beta, so I had to bring it up to speed.

Second, I'd prioritize well-established patterns and frameworks over newer ones. The models simply have better knowledge of well-documented approaches, and it reduces the risk of going in circles trying to make something work.

Halfway through the project, I discovered Apple Docs MCP, which gave Claude quick access to Apple docs and WWDC sessions going back years. That made a noticeable difference.

Building this way let me move much faster. Having something real on device surfaced things I'd never catch in static mockups. Claude Code makes this kind of workflow possible now.

Tools used

Claude Code
Conductor
Wispr Flow (referral, includes a free month)
Axiom iOS Agents
Apple Docs MCP