
Hello.
I build
fast
What I do
Usability
Don Norman is my north star: signifiers that invite the right action, feedback that answers it, mappings and constraints that make the wrong action hard. If users need the manual, the conceptual model failed.
Accessible craft
Semantic HTML, keyboard-first interactions, WCAG 2.2 AA. Controls should look like what they do and answer every action with feedback. If the focus order is wrong, the work isn't done. Accessibility issues are usually usability issues in disguise. Fixing them makes the product better for everyone.
Product engineering
I build and ship whole products, backend included. GarnerGuitar.com has paying students; Rhythm Fit works in a basement gym with no signal.
Design systems
Design tokens and components that survive contact with more than one platform. This site runs on tutti-ui, my React + React Native system.
AI-native interfaces
Streaming output, tool calls rendered as real UI, honest fallbacks. Rhythm Fit's coach streams NDJSON into scheduled workouts; Tribe Tracker drops to deterministic stats when the model fails.
AI is an interface problem
A canned exchange, no model behind it. The rendering is real: tutti-ui's AgentWorkflow and StreamingText, the same components documented in the Storybook.
Build me a three-day dumbbell plan for a basement gym with no signal.
Parse the request
goal, days per week, equipment
Call generate_plan
arguments validated against a JSON schema
Stream the reply
NDJSON chunks rendered as they arrive
Canned data, zero API calls.
AI without the chat box
AI doesn't have to be a conversation. The interesting work is baking the model into the product itself: onboarding that turns a short survey into a ready-to-go plan, coaching that reads your actual data and speaks up on its own, digests that land where you already are.
No blank text box, no prompt engineering left to the user. The model works behind interfaces that look like the product, and when it's unavailable, deterministic fallbacks keep the feature honest.
A survey becomes a plan
Three weeks of workouts land on the calendar. No chat involved.
Coaching that speaks up
Bench press has stalled
The model reads your training data and raises its hand first.
Digests where you already are
Weekly recap: 4 of 5 kept their streak. Sarah leads by 12 points, closable in 3 days.
Posted by a cron job, straight into the group chat.
A superpower, not a replacement
I code with Claude daily and have shipped with Copilot and Cursor too. The speedup is real, but the output is only as good as the human in the loop. Without someone who knows what good looks like, you get slop: code that runs today and can't be maintained tomorrow.
UI is where that shows most. AI has historically struggled with pixel-perfect interfaces, and while newer tooling keeps getting better, a discerning eye and a human leading the way still make the difference. Used that way, AI isn't a replacement for the craft. It's an enhancement, and a superpower.
Side Projects
Passion projects, built nights and weekends because I wanted them to exist. Some solve my own problems, like a workout app whose AI coach comes up with the training plan and tracks my progress over time, so I can just do the work. Others are things I wanted to own end to end, like a design system that ships to web and native from one set of tokens. Each card links to a write-up with the decisions behind the build.
tutti-ui
A cross-platform design system for React and React Native
32 accessible component families, one set of design tokens, 27 of 32 ported to React Native, with 600+ tests and a live Storybook. This site is built with it.
Rhythm Fit
Offline-first workout tracker with a streaming AI coach
A React Native app built for real gym conditions: every mutation lands locally first, syncs when a connection returns, and works with no backend at all. The AI coach streams NDJSON; accessibility is WCAG 2.2 AA.
Tribe Tracker
Social habit challenges with a grounded AI coach
Compete with your people on habits. Offline-first sync, real-time group chat, and an AI coach that reads 14 days of real check-in data and falls back to deterministic stats when the model fails.
GarnerGuitar.com
A Stripe-powered guitar course platform
The payments-to-content pipeline paying guitar students actually use: server-gated lessons, signature-verified Stripe webhooks, signed Cloudflare Stream video URLs, and guest checkout that links purchases to accounts created later.
shedr
A musician's practice toolkit that lives on your music stand
Practice log, Web Audio metronome and drone (Tone.js), a chromatic tuner built on ml5.js pitch detection, recordings, and repertoire tracking. An earlier project, still live and still in use.
My work is design focused, and my background as a musician inspires creativity throughout the development process.