Studio · Uses
Studio · stack
What I use.
The actual hardware, editor, fonts, and tooling behind every shipped product. No affiliate links, no sponsorships — just what's installed and running today.
Hardware
Daily drivers- Mac
- 14" MacBook Pro (M-series). One machine — design, build, deploy, demo.
- iPhone
- Daily test device, always running the latest beta of Weather.Co, tmpo, and Outpost. What ships gets used on this phone for a week first.
- Apple Watch
- Series w/ always-on. Critical for tmpo + Weather.Co wrist surfaces.
- iPad
- Used for testing larger weather + lab layouts.
- Display
- External 27" for code + design simultaneously.
Editor & IDE
Where the code lives- Xcode
- Latest stable. Primary editor for everything Swift/SwiftUI. No Cursor, no Tabnine.
- VS Code
- Web work — the kuhlman-co.com site, Cloudflare Worker, scripts. Vim mode.
- Android Studio
- Kotlin/Compose work for the Weather.Co Android port and Acre.
- Terminal
- iTerm2 + zsh.
ghfor GitHub,wranglerfor deploys,swift testfor unit tests.
Fonts
Site & product UI- DM Sans
- This site's body + headlines. Variable weight, optical-size axis. fonts.google.com
- DM Mono
- This site's eyebrow labels, code blocks, footer chrome.
- SF Pro
- Native iOS / macOS — system font everywhere a product needs to feel native.
Tooling
The build chain- XcodeGen
- Vendored binary in every Xcode project. Project.yml is the source of truth, not the .xcodeproj. Guide →
- Xcode Cloud
- CI/CD for every iOS app. Builds + TestFlight on every push to main. Guide →
- Wrangler
- Cloudflare Workers CLI.
npx wrangler deployfromworker/ships every site change. - esbuild
- JS bundler for the site's SPA (
app.js). Sub-second rebuilds. - Resend
- Transactional email — magic-link sign-in for /members.
- Plaid
- Account sync for the Test112 personal-finance app (via a CF Worker proxy).
- SwiftData
- On-device persistence in every iOS app. Versioned schemas. Guide →
- CloudKit
- Private iCloud sync where the app needs cross-device data — never to my servers.
- Foundation Models
- On-device AI (Apple Intelligence). Outpost Discover, tmpo insights, Upsee weekly briefing. Guide →
Infrastructure
Backend (when there is one)- Cloudflare Workers
- Every backend the studio runs. Stateless functions at the edge. Guide →
- Cloudflare KV
- User accounts, magic-link tokens, settings. ~5ms reads at edge.
- Cloudflare R2
- Object storage for any binary asset that can't ship in the bundle.
- Cloudflare Assets
- Static site delivery for kuhlman-co.com.
- GitHub
- Source of truth. Branches per project, no monorepo.
Deploy
Ship cadence- iOS
git push→ Xcode Cloud → TestFlight. ~12 min, hands-off.- Site
npx wrangler deployfromworker/. ~5s, global propagation in ~30s.- Backups
- Local timestamped folder under
Backups/. Revert script gated behindI_REALLY_WANT_TO_REVERT=yes. Never deploy without one.
Conspicuously absent: no analytics, no error reporter (Sentry, Bugsnag), no growth tooling, no notification provider, no A/B framework, no design-tooling SaaS. The stack is short on purpose — every dependency is a thing I'd have to maintain later.