Use these steps in every repo that should appear in the homepage catalogue.
Generate the file at the repo root with this schema:
{
"id": "collisionDetectionForcefield", // optional, defaults to repo name
"title": "Collision Detection Force Field",
"oneLiner": "Interactive comparison of discrete vs molecular collision physics.",
"demoUrl": "https://username.github.io/collisionDetectionForcefield/", // fallback: repo homepage or GitHub URL
"screenshot": "./screenshot.png", // raw URL or committed asset
"kind": "project", // optional: project | longform | page | any future kind
"tags": ["simulation", "physics", "p5.js"], // descriptive keywords/categories
"status": "published"
}Notes:
kindoverrides topic-based detection. Useproject,longform,page, or new kinds when needed.screenshotcan reference the auto-generated PNG thatgiralready captures; raw GitHub URLs also work.tagsare used for filtering/organizing (previously split betweencategoriesandtags, now unified)- Both
categoriesandtagsfields are written to the JSON for backwards compatibility, but you only need to think about "tags" - Fields you omit will be inferred (e.g.,
id,title,demoUrl).
Commit the screenshot you reference (e.g., screenshot.png) so the catalogue preview has a thumbnail.
Add one or more topics that start with the kind name. Hierarchical paths use dashes:
project-science,project-kids-robotslongform-essay,longform-book-historypage-community,page-lab-applab
The first segment sets the kind (unless catalogue.json.kind is set). Remaining segments feed the category path. You can chain more levels as needed.
After catalogue.json, screenshot, and topics are in place:
- Push the repo normally.
- The
homePageGitHub Action pulls each repo's metadata, regeneratescatalogue_data.json, and redeploys the homepage with updated cards.
Running gir should automate as much of this as possible (creating catalogue.json, capturing screenshot.png, prompting for demo URL, etc.).