FirefoxCSS-Store is a static community catalog for discovering and sharing Firefox userChrome.css themes. It does not scrape, crawl, or auto-discover themes. Every public entry points back to the original repository submitted by an author, maintainer, or community user.
/themes.json endpoint for lightweight integrations.npm ci
npm test
npm run build
npm run dev
Theme entries live in src/content/themes/*.json. New submissions should start with:
status: "candidate"submitterRole: "author", "user", or "maintainer"repository URLpublic/assets/img/themes/Only entries with status: "published" are rendered in the public catalog and exported through /themes.json.
Entries with status: "archived" are rendered in /archive/ and remain available for historical discovery, but the UI marks them as unsupported. Archived entries must include retirement metadata with a reason, check date, and reviewer-facing details.
Community submissions use the Submit a theme GitHub Issue Form. When a complete issue is opened or edited, .github/workflows/create-theme-submission.yml runs scripts/create-theme-submission-from-issue.mjs to:
src/content/themes/;public/assets/img/themes/;npm test and npm run build;submissions/theme-<issue-number> branch.The generated entry remains status: "candidate" until a maintainer approves the submission PR. Approval runs .github/workflows/publish-approved-theme-submission.yml, which switches the entry to status: "published" and assigns the next available catalogIndex. Maintainers still merge the PR explicitly after checks pass. Merged submission PRs close their source issue automatically.
npm run refresh:themes updates only basic repository metadata for repositories already present in the catalog:
It does not search for new themes, crawl topics, or change editorial fields such as title, description, tags, screenshots, or publication status.
The monthly Refresh Theme Stats workflow runs the same refresh command and opens a review PR when stars, update dates, avatars, or accessibility values change.
npm run audit:theme-repos checks the repositories already listed in the catalog. It does not discover new repositories.
The monthly GitHub Actions workflow runs this audit and opens a review PR when it finds changes:
status: "archived" and shown in /archive/;GitHub Actions validates PRs with:
npm test
npm run build
The production workflow builds Astro into dist/ and deploys that artifact to GitHub Pages. Generated site files are not committed back to the repository.
This branch is configured to run from the original organization GitHub Pages domain:
astro.config.mjssite: "https://firefoxcss-store.github.io"base, because the site is served from the domain rootsrc/layouts/BaseLayout.astrohttps://github.com/FirefoxCSS-Store/FirefoxCSS-Store.github.iosrc/pages/submit.astrohttps://github.com/FirefoxCSS-Store/FirefoxCSS-Store.github.io$ claude mcp add FirefoxCSS-Store.github.io \
-- python -m otcore.mcp_server <graph>