A minimal, elegant portfolio website showcasing GitHub projects with a terminal-inspired design.
# Serve locally
npx serve .
# Update projects from GitHub, including private TRE cards
PROJECTS_GITHUB_TOKEN="$(gh auth token)" npm run buildOpen http://localhost:3000 in your browser.
├── index.html # Main page
├── styles.css # All styling
├── script.js # Animations & interactions
├── build-projects.js # GitHub project fetcher
├── package.json # Scripts & config
├── favicon.svg # Site icon
├── logo192.png # Apple touch icon
└── .github/workflows/update-static-site.yml # Daily auto-update
Projects are fetched from GitHub and injected into index.html. This happens:
- Automatically: Daily via GitHub Actions, at an off-minute UTC time to avoid the heavy top-of-hour cron queue
- Manually: Run
node build-projects.js
To include private TRE repos that have a public TRE-owned homepage, run the build with a token that can read those repositories:
PROJECTS_GITHUB_TOKEN="$(gh auth token)" npm run buildThe script also accepts GITHUB_TOKEN, but PROJECTS_GITHUB_TOKEN is the
preferred name because it matches the scheduled workflow secret. Running
npm run build without a private-repo token regenerates a public-only project
grid locally.
In GitHub Actions, set PROJECTS_GITHUB_TOKEN to a token that can read the
private tre-systems repos if private-project cards should be refreshed by
the scheduled workflow. Without that secret, the workflow skips project
regeneration and keeps the already committed site live.
Private repos are shown only when they have a description, topics, a README
image, and a public TRE-owned homepage; private GitHub links are never rendered.
Private TRE repositories can appear on the public site, but the scheduled
GitHub Actions refresh needs an explicit repository secret named
PROJECTS_GITHUB_TOKEN. Use a GitHub token that can read the relevant private
tre-systems repositories, including README and image files. A fine-grained
token should have read-only contents access for the private repositories that
may be displayed; a classic token needs equivalent private-repo read access.
If PROJECTS_GITHUB_TOKEN is missing or invalid, the workflow deliberately
skips node build-projects.js and keeps the already committed index.html
and generated/project-images files live. That preserves existing private
cards, but they will not update automatically until the secret is configured.
Scheduled runs commit and deploy only when index.html or
generated/project-images changes. Push and manual runs still deploy the
current checked-out site, which is useful while actively working during the day.
- Colors: Black background (#000), Terminal green (#39FF14), White text
- Fonts: Inter (body), JetBrains Mono (headings/code)
- Animations: CSS keyframes for glow, fade-in, slide-up effects
MIT License
Robert Gilks - LinkedIn | GitHub
Total Reality Engineering • Founded Australia 1998 • UK 2008
