Use these instructions when you have a private GitHub repo that deploys to a public site (e.g., Netlify, Vercel, GitHub Pages from a private repo).
Your GitHub repo must have the homepage URL field set to your public deployment URL:
- Go to your repo settings on GitHub
- Set the "Website" field to your deployment URL (e.g.,
https://yoursite.netlify.app) - This makes the URL available via the GitHub API
Add a catalogue.json file to your repo root (or in a directory that gets deployed):
{
"id": "gnosisHermesKabel",
"title": "Gnosis Hermes Kabel",
"oneLiner": "A one-line description of your project",
"kind": "page",
"categories": ["writing", "philosophy"],
"tags": ["gnosis", "hermetics"],
"status": "published",
"demoUrl": "https://yoursite.netlify.app",
"screenshot": "screenshot.png"
}Important fields:
kind: Set to"longform"(Writing tab),"page"(Apps tab), or"project"(Projects tab)screenshot: Relative path to your screenshot file (will be resolved relative to your homepage URL)demoUrl: Your public site URL
Create a screenshot of your deployed site:
- Take a screenshot (recommended size: 1200x800px or similar)
- Save it as
screenshot.pngin your repo - Make sure it gets deployed to the same location as
catalogue.json
Ensure both files are accessible on your public site:
https://yoursite.netlify.app/catalogue.jsonhttps://yoursite.netlify.app/screenshot.png
The script will check these locations:
https://yoursite.netlify.app/catalogue.json✅ (most common)https://yoursite.netlify.app/assets/catalogue.jsonhttps://yoursite.netlify.app/public/catalogue.jsonhttps://yoursite.netlify.app/.well-known/catalogue.json
After deploying, verify the files are accessible:
# Test catalogue.json
curl https://yoursite.netlify.app/catalogue.json
# Test screenshot
curl -I https://yoursite.netlify.app/screenshot.pngBoth should return 200 OK.
Repo Structure:
my-private-repo/
├── catalogue.json # ← Add this
├── screenshot.png # ← Add this
├── index.html
└── ... (your other files)
catalogue.json:
{
"title": "My Private Project",
"oneLiner": "Publicly deployed site from private repo",
"kind": "page",
"demoUrl": "https://my-project.netlify.app",
"screenshot": "screenshot.png",
"categories": ["tool", "web"],
"tags": ["netlify", "private"],
"status": "published"
}GitHub Settings:
- Homepage:
https://my-project.netlify.app - Visibility: Private ✅
- The
update_projects.pyscript fetches all your repos (public and private) via GitHub API - For each repo with a
homepageURL, it tries to fetchcatalogue.jsonfrom that public URL first - If the repo is public, it falls back to GitHub raw URLs
- Screenshots are resolved the same way (public URL first, then GitHub)
When working in a private repo that needs catalogue integration, copy/paste this to your AI:
Please set up this private repo for the homepage catalogue:
- Create a
catalogue.jsonfile in the repo root with this structure:
{
"title": "[Project Name]",
"oneLiner": "[One-line description]",
"kind": "[page/longform/project]",
"categories": ["category1", "category2"],
"tags": ["tag1", "tag2"],
"status": "published",
"demoUrl": "[Your deployed site URL]",
"screenshot": "screenshot.png"
}-
Add a
screenshot.pngfile (take a screenshot of the deployed site) -
Ensure both files are deployed to the public site and accessible at:
[Your Site URL]/catalogue.json[Your Site URL]/screenshot.png
-
Verify the GitHub repo homepage field is set to:
[Your Site URL]
Problem: Catalogue entry not appearing after running update_projects.py
Solutions:
- Verify homepage URL is set in GitHub repo settings
- Check that
catalogue.jsonis accessible:curl https://yoursite.netlify.app/catalogue.json - Check that screenshot is accessible:
curl -I https://yoursite.netlify.app/screenshot.png - Run the script with
GITHUB_TOKENset to access private repo metadata - Check the console output for any fetch errors
Problem: Screenshot not displaying
Solutions:
- Verify the screenshot URL in your browser
- Check the
screenshotfield incatalogue.jsonmatches the deployed filename - Ensure the image is actually deployed (check your Netlify/Vercel deploy logs)
Problem: Wrong tab (Projects instead of Writing/Apps)
Solution:
- Check the
kindfield incatalogue.json - Must be exactly:
"longform"(Writing),"page"(Apps), or"project"(Projects)