Games

Where it started.

Before cloud architecture and TypeScript, there were spiders, bullets, and a lot of trial and error. Writing games was a big part of how I learned to code.

In the mid-2000s, Adobe Flash was everywhere — animations, video players, entire websites. The language powering it was ActionScript, a strongly-typed, ECMAScript-based language that by version 3.0 was a serious object-oriented runtime. You could build full applications: event systems, inheritance, interfaces, generics. For a student who wanted to make things move on screen, it was intoxicating.

I spent hours in Flash Professional writing small games — clickers, shooters, physics experiments. Every bug taught me something: how event loops work, how to model state, why separation of concerns matters when your collision detection is entangled with your rendering code.

What happened to Flash

In 2010, Steve Jobs published an open letter — "Thoughts on Flash" — refusing to allow Flash on iOS. He cited battery drain, poor touch support, and a long history of security vulnerabilities. Flash had become the most-patched plugin on the web, a persistent attack surface in every browser.

The industry shifted fast. HTML5, the Canvas API, and WebGL gave browsers native interactive graphics without a plugin. Flash Player went from ubiquitous to legacy to dead. On December 31, 2020, Adobe officially end-of-lifed it — browsers blocked it entirely. Billions of SWF files went dark overnight.

The games I built in college went with them.

Ported to Phaser.js

Phaser.js is the spiritual successor to that era of Flash game development — a mature, WebGL-backed 2D game framework for the browser. The concepts map almost directly: scenes instead of stages, sprites instead of display objects, an update loop instead of ENTER_FRAME.

I'm porting the games I wrote in ActionScript to Phaser.js. Same mechanics, modern stack. A small act of preservation — and a reminder that games are still one of the best ways to learn to program.

Playable Now