How the scan works
This portfolio is self-updating. There is no hand-maintained list of projects — a script scans GitHub and regenerates the data every time the site builds.
The pipeline
Section titled “The pipeline”-
prebuildhook.package.jsonrunsbun run scripts/scan-repos.tsimmediately beforeastro build(and beforeastro dev), so the data is always fresh. -
List repositories. The script calls the GitHub REST API for every public repo, falling back to the authenticated
ghCLI when directfetchis unavailable (e.g. behind a strict proxy). Forks and the profile repo itself are filtered out by default. -
Collect social images. For each repo it fetches the GitHub OpenGraph card from
opengraph.githubassets.comand saves it underpublic/og/. If the host is unreachable at build time, it records the remote URL instead so the browser can load it directly. -
Write the dataset. Normalized metadata (name, description, language, stars, topics, timestamps, image path) is written to
src/data/repos.json. -
Render the mosaic. Astro imports that JSON at build time and the
RepoMosaiccomponent renders it with WebCoreUI components, styled with UnoCSS.
Configuration
Section titled “Configuration”The scan is controlled by environment variables:
| Variable | Default | Purpose |
|---|---|---|
GITHUB_USER |
archont561 |
Which GitHub login to scan. |
GITHUB_TOKEN |
(unset) | Raises API rate limits; provided by CI. |
INCLUDE_FORKS |
false |
Set to true to include forked repositories. |
INCLUDE_SELF |
false |
Set to true to include the profile repo. |
Tech stack
Section titled “Tech stack”- Runtime / package manager: Bun
- Framework: Astro + Starlight
- Components: WebCoreUI (
Badge,AspectRatio,Ribbon) - Styling: UnoCSS (WebCoreUI’s
--w-*tokens are pre-compiled to plain CSS) - Deploy: GitHub Actions → GitHub Pages