Passionately Programming 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.


My approach

How I work.

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

AI as a collaborator, not a shortcut.

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.

Career

The path here.

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.

PeriodRoleOrganization
2015 – 2018Junior Web Developer → Web DeveloperStoryCorps
2018 – 2020Web Developer → Senior Web DeveloperSituation Interactive
2020 – 2020WordPress DeveloperKing & Partners
2021 – 2026Web Developer → Senior Web DeveloperSituation Interactive
2020 – PresentFreelance Web DeveloperIndependent

Resume

Want the full picture?

Download my resume for a complete overview of my experience, skills, and education.