FiveGuesses · v0.1.0

Installation

The README quickstart is the short version of this page. The install, build and check commands below were run on a Linux machine with Node.js 22.22.0 and npm 10.9.4 on 2026-10-21; the release checks apply once a release exists.

Requirements

Requirement Version Notes
Node.js 22.x .nvmrc pins 22.22.0 and .npmrc sets engine-strict=true, so an older Node stops npm ci with an engine error
npm 10.x comes with Node.js 22
A current browser Chrome, Firefox, Safari or iOS Safari the end-to-end tests run in Chromium 141
Python 3.10 or later for the template checks in tests/ and scripts/*.py and for npm run e2e, which serves web-build/ with python3 -m http.server; the game itself needs no Python
Apache (hosting only) 2.4 with mod_rewrite, mod_headers and mod_deflate the default of a KeyHelp host; other static hosts serve the build without the .htaccess headers

Install

git clone https://github.com/luminare-dev/FiveGuesses.git
cd FiveGuesses
npm ci
npm run web

npm run web starts the development server and opens the game at http://localhost:8081.

Build the static site with npm run build: it exports the web bundle to web-build/, writes the licence notices of the packages in the bundle to web-build/third-party-notices.txt, copies the font to web-build/fonts/, writes the precache list and build id into the service worker and checks that the shell carries no inline style or script. web-build/ is what a web server serves (with the .htaccess that the export copies from public/).

Verify the release download

Every release has a SHA256SUMS file. A release carries two archives: fiveguesses-X.Y.Z.tar.gz (the tracked source files) and fiveguesses-web-X.Y.Z.tar.gz (the built site, ready for the docroot). Releases published while the repository is public also carry a build provenance attestation for both archives; releases published while it was private are verified with SHA256SUMS alone.

sha256sum -c SHA256SUMS
gh attestation verify fiveguesses-X.Y.Z.tar.gz --repo luminare-dev/FiveGuesses
gh attestation verify fiveguesses-web-X.Y.Z.tar.gz --repo luminare-dev/FiveGuesses

Check that it works

npm ci && npm run check

The command type-checks, runs the unit tests and builds the site. It ends with the Jest summary (Tests: N passed, N total), the bundle name with its size and gzip size, and the precache count; afterwards web-build/index.html exists. Opening http://localhost:8081 after npm run web shows the title “FiveGuesses”, the subtitle Daily #N · Name the song and a play button.

Checks that CI runs

The web job of .github/workflows/ci.yml runs npm ci, npm run check, installs the Chromium build that belongs to the pinned @playwright/test (npx playwright install --with-deps chromium) and runs npm run e2e. The lint-test job runs the template checks; the same tools, pinned to the same versions, run locally like this:

python3 -m venv .venv
.venv/bin/pip install --require-hashes --only-binary=:all: -r requirements-dev.txt   # yamllint 1.38.0, zizmor 1.30.1
python3 scripts/forbidden_words.py
python3 scripts/set_byline.py verify
python3 scripts/check_workflows.py --list
.venv/bin/yamllint --strict .
markdownlint-cli2 "**/*.md"          # markdownlint-cli2 0.23 (CI uses the markdownlint-cli2 action)
actionlint -color                    # actionlint 1.7.12, shellcheck on every run: block
.venv/bin/zizmor --offline --min-severity=low .github/workflows
python3 -m unittest discover -s tests -v
gitleaks git --redact --no-banner --config .gitleaks.toml .   # gitleaks 8.30.1, full history

Uninstall

Delete the clone. A few things stay outside it: npm’s package cache (npm cache clean --force empties it), pip’s download cache if you installed the check tools (~/.cache/pip on Linux) and, if you ran npx playwright install chromium for the end-to-end tests, that browser (npx playwright uninstall removes it). The game stores nothing on your machine except the browser’s local storage for the site you played on: open About in the game and choose “Reset my data”, or clear the site’s data in the browser’s settings.

Not affiliated with or endorsed by Apple. Apple Music and the iTunes Search API are named only to describe where the song previews come from.

docs/install.md on GitHub

Licensed under MIT. Source: luminare-dev/FiveGuesses at v0.1.0.