I built https://aaronspuzzles.com three times.
1. Using NodeJS, Express, and Plain [[HTML CSS and JavaScript]]
2. Using [[SvelteKit]], which was a full tear-down & rebuild
3. As a [[Static Website]], which was another full tear-down & rebuild... but *should* be the last
I've gone full [[JAMstack]], and in so doing finally realized what static sites really are.
![[Aaron's Puzzles Site Architecture 2026-01-23 14.39.06.excalidraw.svg]]
%%[[Aaron's Puzzles Site Architecture 2026-01-23 14.39.06.excalidraw.md|🖋 Edit in Excalidraw]]%%
Basically, a full-stack website just does all of that stuff together in one big repo. This approach works better for my case because each puzzle, by design, is meant to be a snapshot of a point in time. I don't need (or want) a puzzle I made in 2021 to use the latest & greatest version of whatever dependency available *today*. I want it to use what worked in 2021.
## High Scores & Progress-saving
I used to use Google's Firestore for this. Now I've gone with a different approach that's slightly easier for me to manage (if only due to the number of reps I've done).
- High Scores → a [[Google Apps Script]] webhook & a Google [[Spreadsheet]]
- Progress saving → [[IndexedDB]]
****
# More
## Source
- self