Experience
From client websites to CMS platforms, a frontend framework, and AI and data products. The roles behind the work.From client websites to CMS platforms, frameworks, and AI and data products.
It started with building for clients.
Freelance work meant taking React and Next.js apps and Jamstack sites from design handoff to launch. Animation and interactive features were part of that work.
CMS work followed: client-facing sites and integrations at Narrowstack, then leading the CMS across Hope Media Group’s web properties.
The chapters so far.
2026 – now
Center for Opportunity and Wealth Data
Full Stack Engineer
I build AI and data products at the Center for Opportunity and Wealth Data. My work spans the interface people ask questions in and the services that turn a request into a useful response.
Read the chapter

2025 – 26
Zenith Build
Lead Architect & Author
I owned the contracts between these parts: what an author writes, what the build accepts, and what the browser receives. Those boundaries need to be understandable in the docs as well as in the implementation.
Read the chapter

2024 – 25
Hope Media Group
Software Engineer
I owned CMS architecture and delivery and worked on the integrations that let the web properties serve content and ads.
Read the chapter

2024
Narrowstack
Full Stack Engineer
I worked on the handoff between client requirements, content models and frontend components. An editor needed to be able to change a page without needing to understand its code.
Read the chapter
Narrowstack2021 – 24
Freelance
Full-stack Developer
I owned delivery across the stack. That meant turning visual direction into responsive pages and working through the details that only show up once a site is usable.
Read the chapter
Freelance
The work keeps going.
At the Center for Opportunity and Wealth Data, I build AI-powered, data-driven products across React, Next.js, TypeScript and Python/FastAPI.
Alongside product work, I build independent tools — including the framework this portfolio runs on. Explore those projects under Work.