Portfolio
Northing is a one-person studio. Everything on this site — the media converter, the Homebrew client, the notch app, the browser, the on-device memory layer — was designed, written, tested and shipped by me, in Swift, as arm64 binaries against whatever the newest Apple SDK happens to be.
What I do
SwiftUI and AppKit, Swift concurrency, AVFoundation, WebKit, Core ML and the on-device
Foundation Models — built for Apple Silicon, and using the hardware encoders and the Neural
Engine where they exist rather than reimplementing them. Projects are generated by XcodeGen
from a checked-in project.yml, so the build is reproducible and the
.xcodeproj is disposable.
Event taps, IORegistry, ScriptingBridge, launchd agents, code signing and notarization, TCC permissions, Homebrew's JSON API, WebKit content rule lists. Most of what makes these apps feel native lives below the view layer.
Cloudflare Workers and D1, Firebase Auth and Sign in with Apple, scheduled collectors, offline-first caching. Built so the app still works — and says so honestly — when the service is unreachable.
Interface, icon, naming, marketing text. An app that explains itself badly is a broken app, so the writing gets the same passes as the code.
Selected work
Every project here solved a problem I ran into, then turned into something worth handing to other people.
Sixty formats run on Apple's own hardware-accelerated engines; nineteen genuinely need ffmpeg, because macOS ships decoders for them and no encoders. The catalogue is built by probing the system at runtime instead of trusting a table. Read more →
A 16,000-package search index built from Homebrew's own cached API, an instant offline dependency tree, and a deliberate refusal to rewrite the environment — the app reads your login shell's PATH so brew doctor diagnoses your Mac, not a synthetic one. Read more →
Twelve panes, ten scanners, and one function every removal passes through — so a bug in any scanner still cannot delete your home folder. Sixty-one adversarial path assertions run against that gate on every change. Read more →
Pure black, no border, no shadow — it has to read as the cutout expanding, not a window floating near it. Idles at 0.0% CPU because the motion lives in Core Animation, not a timer. Read more →
Native chrome, zero telemetry, tracker blocking, tab groups and focus mode — plus Safari, Chrome and Firefox extension support through WKWebExtension, including the tab lifecycle most hosts forget to implement. Read more →
Clipboard, app switches and foreground-window captures, indexed and searched with the on-device language model and contextual embeddings. It declares no network entitlement, so "nothing leaves the Mac" is checkable rather than claimed. Read more →
Its first version simulated a planet from a seeded random number generator, and it was the most convincing and least defensible thing in the app. All of it was deleted and rebuilt on live sources, on-device sentiment, and a rule that a number on screen is either measured or absent. Read more →
How I work
Most of these came from a bug that looked fine in the UI and in every manual test.
Contact
Freelance and contract projects, native across Apple Silicon — desktop and iPhone. Also happy to hear about bugs in anything above.