A foxfire-themed personal GitHub dashboard. Standalone, static, single-user. The whole thing is one Astro page that fetches your GitHub data in the browser using a personal access token you paste once.
+-----------------------------+
| Tended |
| ~ a board for the Skulk ~ |
+-----------------------------+
| identity | standing bar |
| tended (52-week heatmap) |
| vigil (streak pips) |
| the watch (issues) |
| recent inscriptions |
| the procession |
| [1][2][3][4][5][6][7][8][9][0]
+-----------------------------+
No server, no OAuth, no telemetry. The token lives in localStorage on
your device only. To revoke access, delete the token in your GitHub
settings or click "forget" in the dashboard.
npm install
npm run dev
Then open http://localhost:4321 and paste a token.
Tended needs a classic GitHub PAT with repo + read:user scopes
(or public_repo + read:user if all your work is public).
The setup gate links you straight to a GitHub form with the scopes pre-filled: github.com/settings/tokens/new?description=Tended&scopes=repo,read:user
90-day expiration is fine for personal use ~ Tended will surface a clear auth error and re-prompt when the token expires.
| Panel | What's actually in there |
|---|---|
| Identity | Avatar, login, auto-flair title, "standing" derived from total contributions |
| Tended | The 52-week contribution heatmap, foxfire-tinted by intensity |
| Vigil | Current streak as a 30-day pip strip; longest streak; last broken date |
| The Watch | Open issues assigned to you, sorted by recency, color-coded by labels |
| Recent inscriptions | Your last ~8 commits, flattened from GitHub's PushEvent stream |
| The procession | What people you follow + repos you watch have been doing lately |
| Hotbar (1~0) | Quick links to common GitHub views; keyboard hotkeys bump the slot |
The vocabulary is intentional: vigil instead of streak, tended instead of contributions, inscriptions instead of commits, watch instead of issues, procession instead of activity feed. None of it is combat-coded.
npm run build
Outputs to dist/. Static. Drop it into any web root ~ no Node, no
runtime needed on the host.
CI is wired up in .github/workflows/deploy.yml: every push to main
that touches src/, public/, or build config rebuilds and rsyncs
dist/ over SSH to the DreamHost VPS.
Required repo secret:
DH_SSH_KEY~ private key matching the deploy account onvps32678.dreamhostps.com
Before the first deploy: create the subdomain tended.kitsuneden.net
in the DreamHost panel and confirm DH_USER / DH_PATH in the workflow
match the user/path the panel provisioned.
- Astro 5 (static output)
- Vanilla TypeScript in client scripts (no framework runtime)
- GitHub GraphQL API for the rich viewer query
- GitHub REST events API for the procession + inscriptions
- Cormorant Garamond webfont for the serif accents (matches kitsunebi)
- Foxfire palette borrowed from kitsunebi's
Layout.astro
- Multi-account switching (drop a select for which
loginto view) - Cache last successful render to localStorage so cold loads aren't blank
- Top-language detection for richer identity flair
- Optional "shared dashboard" mode for orgs (reads org repos, no token needed for public)
- Keyboard shortcuts beyond 1~0 (g+i for issues, g+p for PRs, etc.)
MIT.