A static Astro site that lists Matt Riley's Homebrew tools, Neovim plugins, agent skills, and public template repositories.
- Astro — static site generation
- pnpm — package management
- oxlint — linting
- oxfmt — formatting
- Vitest — tests
The site renders from generated data files:
- Source of truth for Homebrew tools:
homebrew-tools/Formula/*.rb - Source of truth for template repos: public, non-archived
matt-riley/*GitHub repositories where GitHub marks the repo as a template - Source of truth for Neovim plugins: public, non-archived
matt-riley/*GitHub repositories whose names contain.nvim - Source of truth for agent skills:
agent-skills/skills/*/SKILL.md - Generator:
scripts/generate-tools-data.mjs - Generated artifacts:
src/data/tools.generated.tssrc/data/templates.generated.tssrc/data/plugins.generated.tssrc/data/skills.generated.tspublic/generated/readme-images/
pnpm run generate:data owns all generated outputs. It syncs README markdown into the
generated data modules and mirrors any allowed README image assets into
public/generated/readme-images/ so the site can serve them locally.
The generated Homebrew tool data currently focuses on:
- formula name
- packaged version in the tap
- description
- homepage
- synced repository README content when the homepage points at a GitHub repository
- license
- platform support
- install command
- installed binary name
The generated plugin data currently focuses on:
- repository name and slug
- description
- homepage URL
- synced repository README content
- latest Git tag version
- last updated timestamp
- language and topics
lazy.nviminstall snippetvim.packinstall snippet
The generated template data currently focuses on:
- repository name and slug
- description
- homepage URL
- synced repository README content
- last updated timestamp
- language and topics
The generated skill data currently focuses on:
- skill directory slug and frontmatter name
- description, compatibility, license, version, and maturity
- upstream
SKILL.mdsource and raw URLs - rendered
SKILL.mdinstruction content with frontmatter stripped
This repo assumes the tap's duplicate cask/formula issue is resolved elsewhere and that the site consumes the formula-only end state for the Homebrew catalog.
From the repository root:
export NODE_AUTH_TOKEN=<github-token-with-package-read-access>
pnpm install
pnpm run generate:data -- --tap-path ../homebrew-tools --skills-path ../agent-skills
pnpm devIf your tap includes formulas whose homepages point at private GitHub repositories, set
TOOL_REPOS_GITHUB_TOKEN to a token that can read those repos before running
pnpm run generate:data. The generator uses that access to identify and exclude private
repositories from the published site, then refreshes mirrored README image assets under
public/generated/readme-images/ for the remaining public entries.
If your tap or agent-skills checkout is somewhere else, point the generator at it explicitly:
pnpm run generate:data -- --tap-path /absolute/path/to/homebrew-tools --skills-path /absolute/path/to/agent-skillsThe repo now consumes the published Snurble design-system packages from GitHub Packages, so
fresh installs need NODE_AUTH_TOKEN set before pnpm install. The committed .npmrc keeps only
the @matt-riley scope pointed at https://npm.pkg.github.com, and the mise install task writes
the auth token into the user-level ~/.npmrc at runtime. The install task prefers
NODE_AUTH_TOKEN and falls back to MISE_GITHUB_TOKEN, which is already available in CI via
mise-action.
pnpm run generate:data # Regenerate generated catalog data from the tap, GitHub, and agent-skills checkout
pnpm dev # Start local dev server
pnpm build # Run astro check and build static output
pnpm preview # Preview the production build locally
pnpm lint # Run oxlint across src/, scripts/, and tests/
pnpm test # Run the Vitest suite
pnpm format # Format the repository with oxfmt
pnpm format:check # Verify formatting.github/workflows/sync-tools-data.yml syncs site data on a schedule (every 6 hours) and can also be triggered manually via workflow_dispatch. It checks out the public homebrew-tools tap and agent-skills catalog, uses the repo's existing GitHub App credentials (vars.APP_ID and secrets.PRIVATE_KEY) to identify any private tap-backed repositories so they can be excluded from the published site, regenerates and formats generated catalog outputs, and commits if any of those generated outputs changed.
Deployment remains intentionally undecided; the site output is plain static Astro so hosting can be chosen later.