This file stores durable project context so future conversations can resume work with less re-discovery.
- Repository:
FirefoxCSS-Store.github.io - Purpose: static site that catalogs Firefox
userChrome.cssthemes - Main data source:
themes.json - Site source:
dev/ - Generated site output:
docs/
- Package manager:
npm - Build command:
npm run build - Test command:
npm test - Build system:
gulp - Theme validation script:
tests/themes.check.js - Theme metadata refresh script:
scripts/sort_themes.nu - Dev container config:
.devcontainer/devcontainer.json - Devcontainer bootstrap script:
.devcontainer/post-create.sh - Devcontainer automation now runs
.devcontainer/post-create.shfrompostCreateCommandto ensurejq,nu, and project dependencies are installed after container creation/rebuild - The build toolchain now runs cleanly on Node 24 with
gulp@5,gulp-sass@6,gulp-terser, and a customsharp-based WebP conversion step npm auditis currently clean after adding targetedoverridesformarkdown-itand@parcel/watchertransitive dependencies
- Active working branch created for automation improvements:
improve-automation - Existing GitHub Actions:
.github/workflows/build.yml.github/workflows/check-themes.yml- CI now uses current
actions/checkout@v4andactions/setup-node@v4on Node 24 - CI workflows now opt into Node 24 for JavaScript actions explicitly and use
actions/checkout@v6plusactions/setup-node@v6 - Build workflow now runs automatically on pushes to
mainthat affect site/build inputs and commits regenerateddocs/output back to the branch - PR validation now runs
npm testandnpm run buildfor site-related changes instead of only checkingthemes.json - The build workflow syntax also requires
workflow_dispatch:with a trailing colon; missing it makes GitHub mark the workflow file as invalid even if other checks still pass
- Local
.codexfile is ignored in.gitignore - Build workflow currently commits generated files back to the branch after
npm run build - Pull requests touching
themes.jsontrigger validation vianpm test - Site pages are generated from Pug in
dev/pug/ - Client behavior is implemented in
dev/js/main.js - Styles are authored in SCSS under
dev/scss/ - Published site assets live in committed
docs/ - Local containerized development is configured to install Node, npm,
jq, and Nushell - The devcontainer also runs
npm ciautomatically, so rebuilds recreatenode_moduleswithout manual setup gulpfile.jsnow lazy-loads ESM-only Gulp plugins and skips optional directories likedev/fonts/when they are absent- Hidden config generation now filters non-
.txtfiles explicitly so builds do not create stray files likedocs/.robots - Theme entries that depended on fragile remote screenshots have been localized into
images/themes/remote-*and now build into committed assets underdocs/assets/img/themes/ - Binary copies for static images now use
fs.promises.copyFileinstead ofgulp.src().pipe(dest())because the stream path was corrupting some.webpassets indocs/ - Project-facing text should be written in English by default; chat replies should mirror the user's language
themes.jsonis the single catalog source used by the client and copied todocs/themes.jsonduring build- The frontend is a mostly static site with a small client-side app that fetches
themes.json, sorts, filters, and renders cards in the browser - Gulp handles Pug compilation, SCSS compilation, Babel transpilation, JS minification with Terser, image conversion/copy with Sharp, and config file copying
- Images from
images/are emitted todocs/assets/img/; many local screenshots are converted to WebP scripts/sort_themes.nuenriches theme entries withpushed_at,stargazers_count, andavatarusing GitHub/GitLab/Codeberg APIs or git cloning fallback
- Theme rendering is intentionally throttled with
444msper card, which scales poorly for a catalog of 100+ entries - Search/filter logic depends on client-side fetch and has no visible loading or error handling
- Test coverage is narrow:
tests/themes.check.jsvalidates only basic key order/types and not richer schema or link/image integrity
- Read this file before making assumptions about project state
- Update this file manually when there are relevant decisions, branch changes, automation updates, or persistent blockers
- Keep entries concise and durable; avoid transient noise
- Future agents should create a commit and push after implementing relevant changes or new functionality so work stays traceable and reversible
- Future agents must not merge without explicit user authorization
- Future agents must not take actions that could affect the production main branch without explicit user authorization