Building websites since 2015
From nonprofit storytelling to digital marketing at scale to independent client work — over a decade of solving real problems with clean, maintainable code and a bias toward shipping.
Working philosophy
What I optimize for
I believe the best digital work comes from understanding the full picture — not just the design or the code, but the business problem behind both. Every project I take on starts with listening: what’s the goal, who’s it for, and what does success look like?
I write code that’s meant to last. That means strict types, automated testing, semantic markup, and accessibility built in from the start — not bolted on at the end. I care about performance, maintainability, and giving the next developer (or future me) something clear to work with.
Key Points
- Full-stack ownership — I move comfortably between frontend and backend, from React editor components to PHP architecture to CI pipelines.
- Convention over configuration — Predictable patterns reduce onboarding friction and cognitive overhead. If the structure is obvious, the code explains itself.
- Ship, measure, iterate — I’d rather ship something focused and refine it than chase perfection in isolation.
AI Integration
How AI fits into my development workflow
I integrate AI into my development workflow the same way I’d integrate any powerful tool — deliberately, with clear boundaries. AI is exceptional at accelerating research, generating boilerplate, stress-testing ideas, and catching blind spots in code review. I use it daily.
But I don’t hand over architectural decisions, and I don’t ship code I don’t understand. AI works best when the developer driving it knows what good output looks like — and knows when to override it. The judgment, the context, the taste — that’s still the human’s job.
My approach: use AI to move faster on the work that benefits from speed, and stay hands-on for the decisions that benefit from experience.
Key Points
- Code generation & review — Drafting implementations, catching edge cases, and pair-programming through complex logic.
- Research & exploration — Quickly surveying approaches, evaluating trade-offs, and prototyping ideas before committing to a direction.
- Documentation & testing — Generating test scaffolds, writing clear documentation, and maintaining consistency across a growing codebase.
- Always verified — Every AI-assisted output is reviewed, tested, and understood before it ships.
Skills
The toolbox.
A decade of building for the web means picking up a wide range of tools — and knowing when to reach for each one. Here’s what I work with regularly.
Languages & Frameworks
- PHP
- JavaScript (ES6)
- TypeScript
- React
- Vue
- jQuery
- HTML5
- CSS / SASS
WordPress & CMS
- Gutenberg
- Timber / Twig
- ACF
- Multisite
- WooCommerce
- Yoast SEO
- Visual Composer
Testing & Quality
- PHPUnit
- Vitest
- Playwright
- Cypress
- Jest
- axe-core
- TDD
- BDD
DevOps & Tooling
- Docker
- DDEV
- Git
- GitHub Actions
- CI/CD
- esbuild
- Webpack
- Composer
- npm
- AWS
- RSYNC
AI-Assisted Development
- Claude Code
- Gemini
- ChatGPT
- Codex
Methodologies & Standards
- Agile
- Scrum
- Kanban
- Code Reviews
- WCAG
- ARIA
- Semantic HTML
- Responsive Design
Career
From nonprofits to agencies to independent work
I started my career in 2015, hired straight out of college as a Junior Web Developer at StoryCorps — a national nonprofit dedicated to recording and preserving personal stories. Over two and a half years, I grew from junior to Web Developer, building and maintaining the digital platforms that supported their mission. It was a place that taught me how to write code with purpose and work within tight constraints.
From there, I joined Situation Interactive, a digital marketing agency in New York. I spent nearly nine years there — the longest stretch of my career — working across campaigns, platforms, and clients at scale. I sharpened my skills in frontend architecture, performance optimization, and working within large, cross-functional teams. It was where I evolved from a developer into an engineer who could own systems end-to-end.
When the pandemic hit, I was laid off — and what started as an uncertain moment became the foundation for my freelance practice. I built a client roster that let me take on ambitious, long-running projects with real ownership.
| Period | Role | Organization |
|---|---|---|
| 2012 – 2015 | B.S. Computer Science | Brooklyn College |
| 2015 – 2018 | Junior Web Developer → Web Developer | StoryCorps |
| 2018 – 2020 | Web Developer | Situation Interactive |
| 2020 – 2020 | WordPress Developer | King & Partners |
| 2021 – 2026 | Senior Web Developer | Situation Interactive |
| 2020 – Present | President, Full Stack WordPress Developer | Independent |
Resume
Want the full picture?
Download my resume for a complete overview of my experience, skills, and education.
Latest from the feed
A glimpse into what’s happening outside the code editor.