Résumé

Summary

My approach led to decreased friction between PD, XD and CMS authors and led to a 60% reduction in page authoring time.
Read more

Staff level software engineer specializing in JavaScript and React, experienced in delivering scalable, customer-centered web applications in both large enterprise and small team environments. Experienced leading cross-functional initiatives, mentoring engineers, and partnering closely with product, design, and backend teams.

I have a strong foundation in web performance, distributed systems concepts, and understanding of traffic architecture (caching, routing, etc). Adept at translating complex technical challenges into clear business requirements and communicating the concepts to stakeholders... and doing so without making their eyes glaze over. Continuously engaged with evolving industry trends, including AI-informed tooling and development practices.

Key Skills & Competencies

Javascript · React · TypeScript · CSS · Next.js · Node · CMS · Web Performance · Ice Cream Connoisseur · Cross-functional Leadership · Splunk · Jenkins · GitHub · Mentoring · Agile · Test Driven Development · Communication · Problem Solving

Professional Experience

Intuit Logo

Intuit - Staff Software Engineer

San Diego, CA
06-01-2014 to Present

My time at Intuit has been primarily in marketing and marketing-technology, directly supporting the TurboTax.com website. During my time here, I have:

Recently I've been on a team that manages the Referral program for TurboTax. This included leading a team of primarily back-end engineers in support of the service, hands-on delivery of our front-end code and managing the technical relationship with a third-party vendor, PM and stakeholders..


Zoovy Logo

Zoovy Inc - Sr. Web Developer

Carlsbad, CA
09-01-2001 to 06-01-2014

As is common in most start-ups, I filled many roles concurrently, especially in the early days:

Built templates for e-commerce storefronts to use and built dozens of custom e-commerce websites.

As my skills and product knowledge increased, I began working more closely with the development team to update/enhance the user interface and build new features into the core product.

In 2010, I built a JavaScript framework which was used for building the clients e-commerce SPAs as well as the administrative UI for running the storefront (order and product management, shipping, coupons, etc).


WebSideStory Logo

WebSideStory Inc - Multimedia Developer

Sorrento Valley, CA
06-1999 to 06-2001


Education

San Diego State University Logo

San Diego State University

San Diego, Ca
Spring 97 - Spring 99

Attended the School of Communication where I earned a BA in Communication with an emphasis in New Media Studies.


DeAnza Logo

DeAnza Community College

Cupertino, Ca
Spring 94 - Fall 96

Earned an AA and took several classes in film production with focus on cinematography, editing, writing, etc

References

Professional and personal references are available and will be provided upon request.

Personal Projects

Gadgetry - An experiment in AI-driven development
Gadgetry

Gadgetry is a config-driven, themeable page builder for personal homepages. Users sign in with Google or GitHub OAuth, then build a page by adding gadgets such as links, search, text blocks, RSS feeds, YouTube embeds, X (Twitter) feeds, and Pinterest boards. Each page has customizable themes, layout options, and visibility controls (public, private, or unlisted). The app is built as a React + TypeScript monorepo with a Fastify backend, Drizzle ORM, PostgreSQL, and a config-driven editor that supports multiple gadget types without custom code per gadget.

I built Gadgetry as an experiment in AI-assisted development. I did not write any code myself; the entire implementation was generated by AI assistants to test how well a full product could be built from specifications. The repository is private for now, but I may release it publicly.

Tech Stack

  • Frontend: React 18, TypeScript, Vite, Tailwind CSS
  • Backend: Fastify 5, Drizzle ORM, PostgreSQL (JSONB for page configs) and ViteSSR
  • Auth: OAuth (Google/GitHub), dual-token (access + refresh), httpOnly cookies

Gadget Architecture

  • Gadget Architecture
  • Manifest — Each gadget has a manifest (frontend/src/components/gadgets/{type}/manifest.ts) that defines:
    • Type, label, description, category (display | interactive | data)
    • SVG icon — inline SVG string
    • Editable fields — FieldDefinition[] for the editor (text, url, number, select, toggle, icon, textarea, list, checklist, etc.)
    • Default config — default values for the gadget
    • Minimum column span — 1–3, minimum and default column span
    • Renderer — Each gadget has a Renderer.tsx that receives { gadget: Gadget } and renders the public view. Styling (border, padding, background) is handled by the shared panel wrapper, not by individual gadgets, to ensure consistent appears between gadgets.
  • Registry — imports all manifests and renderers and calls register(manifest, Renderer).
  • Editor - A custom editor built with React and TypeScript that allows users to add, remove, and configure gadgets on a page. There is one editor for all gadgets.

To keep with the spirit of that project being written by AI, I used AI to write the description above. 🙂

Live Demo (still WIP. GitHub auth will work better than Google for now)

A simple PHP/MySQL site for managing family gift lists
Family Gift List

A very rudimentary version of this has been powering my families christmas's for years. I was tired of opening three copies of the same DVD, so I built a simple PHP/MySQL site. Family members maintain a personal gift list shared with the family, can flag items as purchased to avoid overlap, and coordinate across the family.

The app includes an admin dashboard for database management, a comprehensive reporting and analytics system with performance monitoring, error tracking, and session-based debugging.

The bulk of this project was built by hand until around October of 2025 when I started using cursor and more AI tools.

Tech Stack & Architecture

  • Frontend: React 18, TypeScript, Vite
  • Backend: PHP 7.4, MySQL 8.0
  • Auth: Google OAuth, Facebook OAuth
  • Reporting: GraphQL API with ag-grid interface for querying application reports
  • Deployment: Docker containers (frontend, PHP, MySQL, phpMyAdmin)
  • Reporting system tracks errors, performance metrics (API calls, page load), user interactions, and debug info.
  • Admin features: archive items, query reports, export to CSV, view performance stats, debug sessions

repository

Note - this project is in the process of being rewritten in React and TypeScript. The new version is not yet ready for production. The repository may not be consistent with the description above, but this branch contains the legacy stack.

Stock price tracking and algorithm-driven trading recommendations
Stock Tracker

Stock Tracker is a web app for tracking select stock prices and applying custom algorithms to inform trading decisions. Users can monitor positions and use the app as a decision-support tool. The React frontend communicates with a PHP API backed by MySQL.

The Docker setup runs MySQL, PHP/Apache, the React/Vite dev server, and phpAdmin for database administration. All services run on Docker's internal network to avoid CORS issues.

Tech Stack & Architecture

  • Frontend: React 18, Vite
  • Backend: PHP, Apache, MySQL
  • Symbol tracking and EOD prices are gathered via a Google Sheet (it's free data, so why not!)
  • API endpoints configurable via endpoints.json for switching between local and production

repository

Case Study - Building out a component library for a large enterprise

Global Web Platform

Problem statement: Break down the legacy monolith into distributed services and consolidate disparate CMS implementations across TurboTax, doing so in a manner that would allow other marketing partners to onboard via paved roads.

My Role: Add support for TurboTax to the existing next.js rendering service built for QuickBooks and determine if the existing QB component library could be leveraged by the TurboTax team.

Additionally, I participated in the migration strategy to consolidate the various CMS implementations, doing so in a manner that would meet the diverse requirements of the 4 different consuming teams; Tax Articles, FrontDoors, Affiliates and in-product upsells.

Requirements: React and Next.js for components and rendering. Authoring would be WP Gutenberg.

My approach...

The rendering service and Gutenberg authoring platform had already been built for QuickBooks, so I met with members from QuickBooks PD, XD and content production (CP). Additionally, to make sure I met the needs of the TurboTax team, I met with members of PD, XD, CP as well as stakeholders that would be impacted. From these meetings, I learned the following:

I took all this feedback and wrote a document on the principles for a new component library. To distill it down, they would be flexible, contain no WP specific code, adhere to the design system and be performant. This was then turned into a design doc that described how applying the atomic principles would allow for content producers to build whatever they needed directly in the CMS, with no code.

My team and I then focused on solving for these by building out a mono-repo of components in typescript. Using typescript was a key decision because we were able to leverage the interface to build out a JSON schema which was rendered in the 'right rail' of gutenberg for editable (non-content) fields using json schema forms, eliminating most manual efforts for building the WP specific code. This pattern quickly became the standard for all the business unit specific libraries that were popping up.

To empower content production, we added tailwind and exposed those classes via a chooser in WP. We leveraged the existing design system (colors, spacing, typeramp, etc) to generate the tailwind styles, solving for the XD requirement.

In less than a year, we rolled out our first pages leveraging the atomic component library.

Results: