22+ years designing systems that work for the people using them. I started in print and brand, spent two decades developing an eye for what actually works across media, and transitioned into building when AI tools made it possible to go from identifying a problem to constructing a solution. I work from real operational painpoints, build lean, and design everything around the person at the keyboard. My projects are not demos — they are functional builds in active development, each one started because someone's workflow was broken and nothing off the shelf fit.
Back to Site
Skills
Design
UX Research UI Systems Figma Typography Accessibility Information Design Print & Brand
Development
Python FastAPI Google Apps Script Vanilla JS HTML / CSS SQLite Ollama PWA
Methods
Painpoint-First Design Prompt Engineering AI-Assisted Development Systems Thinking Workflow Automation
Education
Portland State University
General Bachelor of Science
Focus: Systems Science
In Progress
Self-Directed
AI-assisted development, prompt engineering, full-stack tooling. Learned by building real systems from real problems.
Ongoing since 2023
Approach

Every project I have built started with a specific, real friction point. I do not build features. I build fixes. The methodology is: identify the pain, map the system around it, build the smallest thing that eliminates the problem, then refine.

LUCID
Origin: no reliable way to understand what is actually on your machine
Local file intelligence tool that scans any directory and surfaces not just filenames but what is inside each file. On-device AI summaries via Ollama, duplicate detection, and size analysis. Designed around a strict privacy constraint: nothing leaves the machine. Built to solve a problem I hit personally when trying to audit years of accumulated project files.
Python FastAPI Ollama SQLite
In active development
BRIGS
Origin: context rot. Projects stall because AI sessions have no memory.
A session continuity and context compression system for LLM workflows. The core concept: distill a full conversation into a dense, minimal token (a "gold coin") that any model can use to pick up exactly where work left off. Designed to eliminate the manual context-rebuilding tax that slows every AI-assisted project. Architecture defined. Build in progress.
Python Ollama Markdown
Architecture phase
CanvassKit
Origin: outreach team drowning in unstructured spreadsheets
Contact tracker built for nonprofit outreach teams managing community engagement. No CRM subscription, no onboarding curve. Logs calls, emails, and meetings from a Google Sheets sidebar. Status tracking, auto-formatting, and an interface built specifically for non-technical staff who should not have to think about the tool.
Google Apps Script Google Sheets HTML / Tailwind
Functional build
SoloBill
Origin: contractor paying for a full platform to use 10% of its features
Invoicing tool for independent contractors. Generates, tracks, and sends invoices directly from Google Sheets. PDF export via Docs, client and line-item tracking, email trigger. Tested in one real-world billing cycle, which surfaced UX friction and output issues. Structure is sound. Refinement ongoing.
Google Apps Script Google Docs PDF Export
Tested, in refinement
FreedEase
Origin: re-entry systems are hostile by default. They should not be.
Privacy-first, offline-capable PWA designed for people navigating re-entry after incarceration. Built around the specific constraints of that context: low-trust environments, limited or inconsistent connectivity, and high-stakes information needs. Designed with the assumption that the interface will be someone's first interaction with a tool that actually works for them.
PWA Google Apps Script Vanilla JS
Design prototype
GH2 Contact Tracker
Origin: nonprofit staff logging outreach in ways that lost data
Outreach logging web app built directly from operational feedback from GH2 nonprofit staff. Simple, fast, zero training required. Built to replace an informal process that was creating gaps in contact history, the kind of gap that costs organizations relationships.
Google Apps Script Google Sheets
Delivered to org
Audio & Video Transcription Tools
Origin: manual video logging was eating hours that should not exist
Two connected tools built around a media workflow problem. First: an iPhone audio recorder to PWA transcription pipeline built in Google Apps Script: record, drop audio, get text. Second: a video silence detector that scans raw footage on a timeline, identifies dead space, and outputs timestamps, eliminating manual scrubbing for editors. Both built without prior knowledge of the relevant APIs, learning entirely by doing.
Google Apps Script PWA Vanilla JS
Functional builds
22+ years working across print shops, branding agencies, and nonprofits. Built fluency in what works across print, digital, and UX over a long arc of real-world design practice. Transitioned into building when AI tools made it possible to take a problem from identification to working system without a team. The design background did not go away. It became the filter. Every technical decision gets evaluated against whether the person at the keyboard will understand it without help.