7 min read
How to use the Gamepad API in JavaScript
Learn the JavaScript Gamepad API: read an Xbox or PlayStation controller with getGamepads(), poll buttons and sticks, add rumble, and play a platformer demo.

Software engineerPhotographerAuthor
Building for the web since 1997
Morning Mist – Lake Frank Jackson20mm · f/4 · 1/800s · ISO 200

About
Hello there! I'm a software engineer, self-taught photographer, and author of Creating a Website for Dummies Jr. (Wiley Global, 2017), based in Alabama.
I've been building websites since 1997. First came Geocities pages, then my first real job: radio station websites running on a custom CMS written in classic ASP. WordPress took over in 2006 and kept me busy for 17 years. React showed up in 2019, and in 2023 I moved to Next.js for good.
These days I build with AI tools. Nearly 30 years on the web has taught me how to adapt to ever-changing tech. And when a teammate gets stuck, I'm often the one they ask (my favorite part of the job, honestly).
Career
February 2024 – Present
Technical Lead
Mindsize
May 2023 – January 2024
Team Lead
WPForms.com
May 2022 – April 2023
Technical Lead
Americaneagle.com
May 2013 – May 2022
Director of Engineering
WebDevStudios
January 2010 – May 2013
Chief Engineer
Bluewater Broadcasting
September 2002 – December 2009
Chief Engineer
Gulf South Communications
June 1999 – September 2002
Webmaster
Midwest Communications
Writing
7 min read
Learn the JavaScript Gamepad API: read an Xbox or PlayStation controller with getGamepads(), poll buttons and sticks, add rumble, and play a platformer demo.
15 min read
How I built NES-style 8-bit sound effects with about 250 lines of Web Audio API code, then pushed it to a four-channel chiptune and a lo-fi tape deck.
5 min read
I tried to take a photo of the moon each month in 2023. Was I able to do it?
Reading


Gallery