Executive summary
What building, launching and supporting three native apps alone has taught me about scope, architecture and finishing things, with ControlPad, a Mac, iPhone and iPad product, as the worked example.
Context and constraints
An independent product has no one else to absorb the hard parts. The same person decides what to build, designs the interaction, writes the code, ships through Apple's review and notarisation, and answers the support email when something breaks.
ControlPad turns an iPhone or iPad into a trackpad, keyboard and remote for a Mac, with controls that change to match the app in front. It spans a native Mac app and touch-first iPhone and iPad apps that talk to each other directly.
Constraints
- One person, part-time. Every component has to be simple enough to maintain alongside a full-time job.
- No backend. No servers to run, pay for or secure, and no accounts to manage.
- Platform rules. Controlling another app's pointer and keyboard needs macOS Accessibility access, which rules out the Mac App Store.
- Input latency. A trackpad over a network is only usable if it feels immediate.
My role
Sole designer, engineer and publisher: product decisions, architecture, code, release, distribution and support.
Technical challenge
Making a phone feel like a Mac's trackpad and keyboard over a local network, with controls that change the moment you switch app, while keeping pairing secure and the whole product simple enough for one person to run alongside a full-time job.
Architecture and decisions
- Local and direct. Devices discover each other on the local network and connect directly, so latency stays low and nothing leaves the network.
- Pair once, encrypt always. A six-digit pairing code that is never sent over the network, then encryption on every later connection.
- Let the Mac lead. The Mac app tracks the frontmost app and text-field focus, and the touch surface reshapes itself to match, with tailored controls for more than 50 apps.
- Split distribution by constraint. The Mac app is signed, notarised and distributed directly; the iPhone and iPad apps go through the App Store.
Product architecture
Everything that would usually need a server (identity, pairing, sync) happens between the devices themselves. That removes the most expensive things to operate, at the cost of features only a cloud service can offer.
Alternatives considered
- A cloud relay. It would allow control from anywhere, but adds a server to run, secure and pay for, and adds latency to every touch.
- Mac App Store distribution. Easier discovery and updates, but the sandbox rules out the Accessibility access the product depends on.
- A generic remote. Simpler to build, but it loses the core idea: controls that follow the app you're using.
Trade-offs
- Local-only limits reach. No control from outside the network, by design.
- Direct distribution moves work onto me. Signing, notarisation, updates and the download page are mine to run instead of the App Store's.
- Tailored controls cost upkeep. Each supported app is a small promise that has to survive that app's next update.
Execution
- Three apps, one local protocol: a native Mac app and touch-first iPhone and iPad apps.
- Two release paths: the Mac app signed, notarised and distributed directly; the iPhone and iPad apps through the App Store.
- Product, design, engineering, release and support owned end to end, by me.
Results
ControlPad is launched on macOS, iOS and iPadOS, with tailored controls for more than 50 Mac apps.
ControlPad, TVControl and RepSense are all launched and maintained independently. The same habits run through all three: local-first architecture, no accounts, privacy by default, and enough diagnostics that one person can support them.
Reflection
- Scope is the real constraint. Finishing means deciding, early and often, what the product won't do.
- Platform constraints are design inputs. Accessibility permissions shaped distribution; distribution shaped onboarding.
- Owning support changes how you build. Logs, diagnostics and clear error states pay for themselves in the first week after launch.
Technologies
- Swift
- SwiftUI
- macOS Accessibility
- Local network discovery
- Encrypted pairing
- Notarisation
- App Store
Next case study
Building Reliable Event-Driven Financial Systems
Distributed systems