Skills

Every skill below links to a real role, project, or certification. Hover any skill to preview it, or click to pin it open.

Hover to preview · click or tap to pin · arrow keys work too

Languages & platforms

Domains & systems

Practice

People & collaboration

Pick a skill to see where I used it, and what I actually did with it. Every entry maps to a job, a shipped project, or a certification — nothing here is aspirational unless it says so.

Java

Trigger.Watch · Mobile Application Developer · 2016–2021

Java was the backbone of Trigger.Watch for nearly five years. I wrote the Android client and the mobile API behind it, including the data models for films and content warnings and the logic that aggregated individual votes into a single verdict per film.

Education & certification

Four years of Java through my Computer Science degree at Portland State University, and a TestDome certification in Android and Java in 2018.

Kotlin

Trigger.Watch · Mobile Application Developer · 2016–2021

As Android moved to Kotlin-first, I moved with it — writing newer parts of the app in Kotlin while the existing Java code kept running alongside it. Working across both taught me interop, and taught me to migrate a codebase incrementally instead of rewriting it and hoping.

Android SDK

Trigger.Watch · Mobile Application Developer · 2016–2021

I built and shipped the Trigger.Watch Android app end to end — activity and fragment lifecycles, layouts, permissions, and the release process. Supporting real users meant handling the unglamorous parts too: varied screen sizes, older OS versions, and bugs on devices I did not own.

Firebase

Trigger.Watch · Mobile Application Developer · 2016–2021

Firebase was the backend behind Trigger.Watch. I used it for authentication, data storage, and syncing votes across users, so that a film’s content warnings reflected the whole community rather than any one person’s reaction.

REST APIs

Trigger.Watch · Mobile Application Developer · 2016–2021

I designed and built the mobile API the Android client consumed — choosing the endpoints, shaping the responses, and evolving them as the app changed without breaking the versions already in people’s hands.

Automattic · Happiness Engineer · 2021–present

Reading API responses is routine when diagnosing a customer issue. A large part of support is establishing what a system actually returned, as opposed to what someone expected it to return.

C & GTK

GNOME Foundation · Paid Intern · Summer 2017

I spent a summer contributing to GNOME Recipes, built for GNOME’s 20th birthday. The role combined my knowledge of cooking with my experience in C and GTK — an unusual pairing, and exactly why the work suited me.

JavaScript

Personal projects

I built Starry Sky, a WordPress block that paints an interactive night sky onto an HTML canvas — hundreds of stars with true stellar colors, twinkling, diffraction spikes, pointer parallax, and shooting stars. It runs in both the block editor and on the front end.

Education

freeCodeCamp Full Stack Web Development Certification, 2016–2017.

HTML & CSS

Certification

TestDome HTML/CSS certification in 2016, alongside the freeCodeCamp full stack curriculum.

Personal projects

The Starry Sky block’s editor and front-end styles. This skills matrix is another example — the panel you are reading is driven entirely by HTML and CSS, with no JavaScript at all.

PHP & WordPress

Automattic · Happiness Engineer · 2021–present

Five years working inside the WordPress ecosystem every day — themes, plugins, the block editor, and the ways they fail in the hands of real users.

Personal projects

Starry Sky is a complete WordPress plugin: PHP block registration, asset enqueuing, and block.json metadata sitting alongside the JavaScript.

Swift

Personal projects

I built a macOS task and pomodoro app in Swift. I went looking for one tool that combined a todo list, adjustable pomodoro lengths, per-task estimates, and a widget, found that no existing app had all four, and built it instead. I use it to structure guild and project work outside live support hours.

How I learned it

I was learning Swift while building it, using Claude Code as a teacher rather than a code generator and writing most of the functions by hand. Learning a language by shipping something I depend on daily turned out to be a faster way in than learning it in the abstract.

DNS

Automattic · Domains Guild Lead · 2025–present

As Domains Guild Lead I am the escalation point for DNS across the support organization: A, CNAME, MX, TXT and NS records, zone configuration, nameserver delegation, propagation, and the many ways a single wrong record takes down a site or silently stops its email.

Automattic · Happiness Engineer · 2021–present

Diagnosing DNS is daily support work: establishing whether a site is failing at the host, the registrar, the zone, or a cached record somewhere in between.

Domain registration & transfers

Automattic · Domains Guild Lead · 2025–present

Registration and renewal, transfers between registrars, auth codes and transfer locks, WHOIS and contact verification, and the ICANN rules that govern the timing of all of it. The transfers that reach me are the ones already stuck.

Registrar & registry relations

Automattic · Domains Guild Lead · 2025–present

Some domain cases cannot be solved from our side at all. I interface directly with registrars and registries to move them — stuck transfers, disputed registrations, contact and compliance holds — which means working inside somebody else’s process, on somebody else’s timeline.

Why it is a distinct skill

It is as much relationship and vendor work as technical work: knowing who to contact, what evidence they need before they will act, and how hard to push on behalf of a customer who is waiting.

SSL/TLS certificates

Automattic · Domains Guild Lead · 2025–present

Certificate provisioning and renewal, and the failures that follow a domain change — name mismatches, mixed content, and certificates that cannot issue because DNS is not yet pointing where it needs to.

Debugging & troubleshooting

Automattic · Happiness Engineer · 2021–present

Most reports arrive as a symptom, not a cause. My day is spent narrowing a vague description down to a specific, reproducible failure — and knowing when the answer is a setting, a plugin conflict, a caching layer, a DNS record, or a genuine bug.

Trigger.Watch · Mobile Application Developer · 2016–2021

Chasing crashes across devices and OS versions I could not reproduce locally, working from stack traces and user reports rather than a debugger.

QA & bug reproduction

Automattic · Happiness Engineer · 2021–present

Turning a customer report into something an engineer can act on: isolating the trigger, finding the minimum steps to reproduce, and writing it up with the environment details that matter. Knowing which reports to escalate, and with what evidence, is most of the job.

Trigger.Watch · Mobile Application Developer · 2016–2021

Testing releases across the range of Android devices and versions my users actually had, rather than the one in my hand.

Technical support

Automattic · Happiness Engineer · 2021–present

Five years supporting WordPress.com customers, from first-time site owners to developers. The work is equal parts technical diagnosis and clear explanation — solving the problem matters, but so does leaving someone able to handle it themselves next time.

Technical writing

Automattic · Happiness Engineer · 2021–present

Explaining technical problems to non-technical people, in writing, all day. Documenting fixes so the next person does not have to solve the same thing twice.

Published

“Open Source, D.R.Y., And Community in Pandemic Times” — April 2020.

AI & agentic tooling

Automattic · Happiness Engineer · 2021–present

I build agent skills that encode our support conventions — reply structure, internal note format, escalation and transfer templates — so drafting starts from our standards instead of a blank page, and I am editing rather than reconstructing. During live shifts I use AI as a diagnostic partner: it is good at surfacing candidate causes I have not considered, and I am the one who rules them out.

Reviewing someone else’s tooling

I reviewed a colleague’s internal Alfred workflow for domain lookups and wrote up a severity-ranked audit: inverted DNSSEC detection logic that reported the opposite of the truth, an unverified external update mechanism, and argument handling that silently corrupted DNS record lookups. None of it was visible from using the tool normally.

What I do not delegate

Deciding what is true. Anything that reaches a customer gets read as though I had written it from scratch, because I am the one accountable for it.

Git & version control

Across every role

GitHub for public work, GitLab for active private version control. Branching, review, and release practice from both solo projects and collaborative open source contribution.

Team leadership

Automattic · Domains Guild Lead · 2025–present

I lead Automattic’s Domains Guild, the cross-team group responsible for domain expertise across the support organization. Guild members sit on their own teams under their own leads, so the role runs on expertise and persuasion rather than reporting lines. I have not stopped doing the work in order to lead the people doing it.

What that means day to day

Setting the guild’s direction, running its rhythm of meetings and updates asynchronously across time zones, coaching Happiness Engineers through live escalations and disputes, and representing support’s view of domains back to the product and engineering teams.

Mentoring & training

Automattic · Domains Guild Lead · 2025–present

Coaching Happiness Engineers through escalations and ownership disputes while the cases are live, and training the wider support organization on domain fundamentals — DNS, transfers, certificates — so the baseline across the team rises rather than the work concentrating on me.

How I measure it

Not by how many escalations I resolve, but by how many stop needing to reach me at all. Being the bottleneck is easy; making yourself unnecessary is the harder and better outcome.

Knowledge management

Automattic · Domains Guild Lead · 2025–present

I own the guild’s documentation: keeping it accurate as registrar behavior and policy change, and keeping it structured so that somebody under time pressure can actually find the answer.

Automattic · Happiness Engineer · 2021–present

Documenting fixes and recurring issues so the same problem is not solved from scratch twice.

Open source collaboration

GNOME Foundation · Paid Intern · Summer 2017

Contributing to GNOME Recipes meant working in public, to someone else’s conventions, with review from maintainers I had never met in person.

Automattic · Happiness Engineer · 2021–present

Five years in the WordPress ecosystem — one of the largest open source projects in the world.

Remote collaboration

Automattic · Happiness Engineer · 2021–present

Automattic is fully distributed, and I have worked that way for five years. Asynchronous, written-first communication across time zones is not an adjustment I would need to make — it is how I already work.

Automattic · Domains Guild Lead · 2025–present

Running a guild asynchronously, for people spread across every time zone, without the fallback of getting everyone in a room.

This matrix is built with plain HTML and CSS — no JavaScript. It works with a keyboard, on touch, and with a mouse.