Tools I build with

The actual stack — what's open in my dock right now, not what looks good on a résumé. Click any card to see how I use it.

Apple stack

🛠

Xcode 16

The IDE for everything. iOS, macOS, watchOS, visionOS.

I drive Xcode mostly through xcodebuild on the CLI for archives + uploads, but the IDE is where the actual writing happens. Live previews on for SwiftUI work. Instruments for performance dives.

🦅

Swift + SwiftUI

Native Apple, no compromises. SwiftUI for UI, Swift everywhere else.

~380K lines of Swift across the portfolio. SwiftUI is the default; UIKit only when SwiftUI hits a wall (custom collection-view diffing, complex gesture interactions). Swift Concurrency for everything async — async/await, actors, AsyncStream.

🗄

SwiftData + CloudKit

Local persistence + private iCloud sync. No backend.

SwiftData for the local store — DupeOut's cluster cache, Closet's wardrobe, EatWisely's meal log. CloudKit private database for cross-device sync. The "no backend" architecture means I never run a server, never pay for hosting, and Apple controls the data plane.

🧠

Apple MLX

On-device LLM inference. Replaced the dead llama.cpp Swift fork.

CHSharedKit 2.5 swapped MLX in as the on-device LLM backend after eastriverlee/LLM.swift went 404. Qwen 2.5, Phi-3.5, and Llama 3.2 all run cleanly on Apple Silicon. The unified backend powers AI features in LiftCoach, EatWisely, Closet, and TrainInsight without any of them touching the network.

👁

Vision + PhotoKit

Image analysis, perceptual hashing, feature embeddings — all on-device.

DupeOut's whole engine is built on Vision: VNFeaturePrintObservation for similarity, Laplacian variance for sharpness, luminance histograms for the Bad Photos detector. PhotoKit handles the actual library access + iCloud Photos download orchestration. None of it touches the network.

App Intents

Siri Shortcuts integration. Cheap power-user surface.

DupeOut Build 62 added 4 intents: Scan, Show Duplicate Count, Open Trash, Scan With Preset. The "Show Count" intent answers Siri without launching the app — it just reads from UserDefaults (the foreground app writes after every successful scan). Tiny code surface, real value.

Workflow

🤖

Claude Code

Where most of the keystrokes happen now.

I drive the architecture, the design decisions, the cadence. Claude Code executes the boring keystrokes — implement-this-helper, refactor-this-API, write-the-docstring, run-the-tests, archive-and-upload. Iteration cycle dropped from days to minutes for routine work. The savings get redirected into more careful design + more thorough testing.

📝

Cursor

Secondary editor for solo deep-focus passes.

For visual work where I need to see + manipulate the file directly. Tab-complete is excellent for SwiftUI view scaffolding. Pairs with Claude Code for the larger refactors — Cursor for inline iteration, Claude Code for orchestration.

Things 3

Personal todos. Long-running queue management.

Today / Upcoming / Areas. The thing I love is that it stays out of my way — no notifications, no streak counters, no AI suggestions. Just a place where I can drop something and trust it'll resurface when I asked it to.

🎨

Figma

Mockups, icon work, marketing visuals.

Light usage — most UI design happens in SwiftUI directly because the iteration loop is faster (Xcode preview is instant, Figma → Xcode is a translation step). Figma earns its keep for: marketing visuals, app icons, App Store screenshots, anything that needs to live outside the running app.

🚀

App Store Connect API

Automated archive + upload + TestFlight notes.

Each app has a scripts/build-and-upload.sh that runs xcodebuild archive, exportArchive, altool upload, then PATCHes TestFlight What-to-Test notes via the JSON API. End-to-end ship is one command. ASC API key + issuer ID live in a gitignored .env per app.

🐙

GitHub Pages

This site. Every per-app marketing site. Free, fast, no build step.

Plain HTML + Tailwind CDN + Inter font. No Hugo build step on the recent pages. Each per-app site lives at /apps/<name>/ with its own index.html, privacy.html, support.html, style.css. Push to master, Pages deploys in 30 seconds.

Hardware

💻

MacBook Pro M3 Max

Primary machine. Xcode flies. MLX inference is fast enough that the dev loop never blocks on the model.

📱

iPhone 16 Pro

Daily driver + primary test device. Most TestFlight feedback comes from real-world use here.

Apple Watch Ultra 2

TrainInsight + LiftCoach test target. Crown-driven UI is genuinely fun to build for.

📚

iPad Pro 11"

Reading + iPad-layout testing. Every app gets at least one explicit iPad pass.

Want to see this in motion? /now tracks what I'm working on this week. Home has the apps grid + recent commits.