A nonprofit's WordPress platform: built with an agency, then run and extended in-house.
TWR Web Platform
The problem
An education nonprofit needed a web platform that a small team could actually run — course pages, resources, press, role-based access — without a developer in the loop for every content change.
What I built
A WordPress theme and block system, and a design system growing out of it.
Climber Interactive, an agency, built the original theme and its first blocks in 2022 and returned for feature projects through 2024. I directed that relationship, including the scope of each follow-on engagement. From that autumn my team owned the codebase and wrote most of it: 615 of its 1,243 commits are mine.
I was the lead developer, and I designed on the site too. I hired and managed a design intern, delegated design and web work to interns and a senior designer, and reviewed what came back.
- 16+ custom Gutenberg blocks. Each has its own field configuration, so editors compose real pages instead of fighting a generic page builder. The agency shipped the first set; I added a second wave and migrated the legacy ones.




- A design system, proposed from an accessibility audit. Auditing the site's most-reused components turned up the same problem everywhere: each one rebuilt from scratch, with accessibility and modern standards re-solved page by page instead of once. Wrote the proof of concept myself, from Creative's own Figma file — then handed leadership of the real build to a direct report. The prototype and the early conversations with Creative and Marketing are theirs now, not just the easy parts.


- Accessibility as a default, not a pass at the end. On the platform my team ran, every custom block carried ARIA roles, correct focus order and an alt-text workflow, checked against a real audit baseline rather than assumed.
How it looked
Pages from the staging copy of the site as it stood under my team. They are staging content, cropped to the page itself.



In 2026
- A sign-in flow redesigned from a spec, not a hunch. A confusing error state and a dead support link were driving avoidable support contacts — a real customer-experience cost, not just an eyesore. Wrote a six-change spec with annotated before/after mockups; it shipped as written.


- A video-playback failure, root-caused properly. Learners were getting stuck mid-course. Traced it to an HLS/CORS misconfiguration, specified the fix, and verified it end-to-end on a real account before calling it done.

Where it stands
From 2022 to 2025, this was the platform the organization ran its public site and course delivery on, and I was its lead developer. My focus now is the integrations, systems, and workflows around it, and championing the design system, now led by a direct report I coached into it. I'm also working to bring the accessibility baseline from this platform to the organization's current site.