I built AaronsPuzzles.com like a tank. I needed a peashooter.

Original architecture:

Until 2026, aaronspuzzles.com was one code base. Every time I touched the website, I had to worry about breaking everything. Each new puzzle I wanted to add meant dealing with dependencies I used years ago that want to update themselves (and likely break what was already working).

flowchart TD
	subgraph Z ["Aaron's Puzzles Repo"]
	    A("Site index")
	    B("The Vault")
	    C("Cookie Jar")
	    D("Brief Mystery")
	    E("Pandora's Box")
    end
    subgraph Y ["Deployed Site"]
	    F("HTML, CSS, & JavaScript")
    end
    Z--Build and deploy-->F

Each website build (TypeScript build & bundle, I mean) amounted to rebuilding everything every time.

New architecture:

The new architecture splits every puzzle into its own repo, its own codebase. I build (compile & bundle) each puzzle ONCE in its own VS Code project. Then I manually copy/paste the contents of the /dist to the aaronspuzzles.com repo as static HTML/CSS/JavaScript files, and never have to touch it ever again. Dependencies are no longer being tacked on year over year. I no longer re-build everything. Things should never break again™️.

flowchart LR
	subgraph A ["The Vault Repo"]
	    B("The Vault source")
	    b("HTML, CSS, & JavaScript")
	    B--Build-->b
    end
    subgraph C ["Cookie Jar"]
	    D("Cookie Jar")
	    d("HTML, CSS, & JavaScript")
	    D--Build-->d
    end
    subgraph E ["Brief Mystery"]
	    F("Brief Mystery")
	    f("HTML, CSS, & JavaScript")
	    F--Build-->f
    end
    subgraph G ["Pandora's Box"]
	    H("Pandora's Box")
	    h("HTML, CSS, & JavaScript")
	    H--Build-->h
    end
    subgraph Y ["Deployed Site"]
	    J("Site index")
	    I("HTML, CSS, & JavaScript")
    end
    b--"copy & paste"-->I
    d--"copy & paste"-->I
    f--"copy & paste"-->I
    h--"copy & paste"-->I

This way, puzzles become what they are - a snapshot of a point in time. This approach also completely opens up wholly new ways to build puzzles. I’m no longer locked into a particular framework for forever. I am no longer even required to use JavaScript as the development language, if I wanted.

Removed Dependency on “the Cloud”

My puzzle web pages have always worked locally, but they did assume that game progress was being saved to a Google Firestore cloud database. As part of this “one last rebuild for every puzzle” I am migrating to use in-browser storage & a dead simple Google Apps Script-based high score system that will fail elegantly (if it fails) and not affect user puzzle-solving experience.