Personal hub for @vardius: the GitHub Pages sites and every public repository, rendered from the GitHub API.
Live at https://vardius.github.io/
index.html,assets/style.css,assets/app.js: a static page with no framework, no build step and no third-party scripts (no analytics, no ads)..github/workflows/deploy.ymlruns on every push, daily and on demand. It callsscripts/fetch-data.shto snapshot the public repositories intodata/, then deploys the site with GitHub Pages' Actions deployment.- If the snapshot is missing (local development, or Pages still deploying from the branch) the page falls back to the public GitHub API from the browser.
- Repositories with GitHub Pages enabled are shown as "live sites", unless
they are archived or have the
no-showcasetopic (gh repo edit OWNER/REPO --add-topic no-showcase). The snapshot asks the Pages API for each site's real address (custom domains included) and falls back tohttps://vardius.github.io/<repo>/. A repository'shomepagefield is only ever used as an extra "website" link. Domains listed inwindow.SITE.ignoreDomainsare never linked to. scripts/shoot-sites.mjsthen screenshots every live site with the runner's Google Chrome intodata/shots/, in light and dark mode, so each site card shows the real page as of the last deploy in this page's current theme.
Nothing needs to be uploaded when a project is added: repository artwork is generated from the name, and a site whose screenshot is missing (live API fallback, or the site failed to load) gets a drawn placeholder instead.
A private repository's GitHub Pages site can be shown without exposing the repository itself. Two things switch it on:
- Add the
showcasetopic to that repository (gh repo edit OWNER/REPO --add-topic showcase, or the "About" gear on GitHub). Remove the topic, or archive the repository, to unlist it. - Once: create a fine-grained personal access token with Metadata:
Read-only and Pages: Read-only on all repositories, and save it as
the
SHOWCASE_TOKENsecret of this repository (Settings → Secrets and variables → Actions). Pages access is what lets the snapshot show custom domains instead of the github.io address.
The next snapshot lists the site with a "Private source" badge, showing only its name, description and language, with no link into the repository. Private repositories never appear in the repository grid or the public-repo counters.
python3 -m http.server 4173Then open http://127.0.0.1:4173/. To use a data snapshot instead of the live API:
OWNER=vardius ./scripts/fetch-data.shAnd to add the site screenshots (needs Google Chrome):
npm install --no-save --no-package-lock playwright-core@1.64.1 && node scripts/shoot-sites.mjsThe only site-specific settings are in window.SITE in index.html
(owner, showName, ignoreDomains). Name and bio are read from the
GitHub profile, so the page shows exactly what GitHub shows.