I write code to solve problems — and often just for fun.

Featured Projects
- Quartiles Solver
Apple News+ Quartiles solver. Enter your tiles to find words to try for today’s or any past puzzle. Enter the full board or just the tiles you’re stuck on.
- Wordle Solver
NYT Wordle solver. Enter your green, yellow, and gray letters to narrow down words to try for today’s or any past puzzle.
- Spelling Bee Solver
NYT Spelling Bee solver. Enter your required center letter and optional letters to find words to try for today’s or any past puzzle. Pangrams highlighted.
- Analytical Spam Filter
Block WordPress comment, trackback, and pingback spam automatically. No captchas, no accounts, and no external services required.
- Gauntlet Racer
Play Gauntlet Racer, a fast-paced HTML5 driving game with procedurally generated roads, six unique biomes, power-ups, and fully customizable difficulty. How far can you go?
Latest Blog Posts
- Upgrade PHP on a Debian LAMP Stack
Upgrade PHP on a Debian LAMP stack running Apache and PHP-FPM, with steps for Apache reconfiguration, verification, cleanup, and troubleshooting.
- Install and Harden a Debian 12 LAMP Stack on Amazon Lightsail
Guide to installing and hardening a LAMP stack on Amazon Lightsail with Debian 12 and PHP 8.4, covering Apache, PHP-FPM, MariaDB, HTTP/2, and Let’s Encrypt SSL.
- Power Automate: Copy SharePoint Multi-Person Fields Using Claims
Power Automate SharePoint multi-person fields fail when copied between lists. Claims-based identity is required to populate person fields correctly.
- Using AI to Modernize a 30-Year-Old QBasic Game for the Web
I found a QBasic game I wrote in 1996 and used AI to rebuild it for the web with JavaScript, HTML5 Canvas, and modern features.
- Remove System Prefixes in SharePoint Lookup Columns
SharePoint lookup columns create dependent fields with system prefixes. Remove prefixes and understand internal vs. display name behavior.