dashboard

Front page of git.bytestone.uk for visitors who are not signed in (Caddy serves the deployed files there; signed-in users see Forgejo). Lists all public repositories across Forgejo (git.bytestone.uk, hum3) and GitHub (drummonds) that have been updated this year.

Latest: v0.1.14

Diagram rendered with d2.

Build

task docs:build   # render diagram, assemble docs/
tp pages          # preview locally
task refresh      # rescan forges, update repos.json, regenerate d2 + HTML
task dia          # refresh + build + commit + push (origin and github) + deploy
task edit         # local editor for ecosystem groups (http://localhost:1350)

repos.json is the single source of truth: groups (ecosystems, with their colours) and repos. Public repos are discovered by the refresh; private repos are listed by hand (private: true, via the editor's Add a repo form) and get a badge, no forge links and no API checks. A repo that deliberately has no GitHub mirror sets no_mirror: true so flag 1 reads n/a. This repo is one of those: it lives on Forgejo only. cmd/refresh regenerates the group containers in dashboard.d2 (between the AUTO-GROUPS markers; the relationship arrows below them are hand-written and use group ids) and index.html.

Detail pages

The first column of the table links to repos/<name>.html, one page per repo with its links (docs, website, origin, mirror, Codeberg, home Forgejo), stars by forge, issues, the five migration checks written out in full with a link to where each is fixed, and what was read from the repo (task-plus.yml, pages_deploy, old statichost site). Generated with the other pages; repos/ and docs/repos/ are not committed.

Stars

The master page shows total stars across all forges with a link to stars.html, the detail page: a column per forge (Forgejo, GitHub, Codeberg) by ecosystem and by repo. The refresh records stars_forgejo, stars_github and stars_codeberg per repo; stars is their sum. Codeberg stars fall away as repos are deleted there.

Editing ecosystems

task edit runs a small lofigui app that edits repos.json in place: create, recolour, reorder and delete groups, move repos between groups with a drop-down per row, and set a repo's public website (the www column, e.g. the site a static-site repo builds). Every save regenerates dashboard.d2 and index.html; the Run task docs:build button renders the diagram for a preview at /docs/. Commit repos.json, dashboard.d2 and index.html when done. Nothing is pushed or deployed by the editor.

Migration flags

The Status column shows four dots per repo (green = desired state, red = needs fixing, yellow = partial, grey = n/a or unknown). Dots link to the place where the fix is made. The migration panel above the table counts what is left.

  1. GitHub mirror in sync — the GitHub copy is at the same commit as the Forgejo original. Red if the mirror is missing or stale; n/a when the repo sets no_mirror: true.
  2. No Codeberg repo — yellow if archived, red if still active.
  3. Docs in the right place — if the repo should have a docs site, it answers at its docs_url on docs.bytestone.uk, and the old h3-<name>.statichost.page site is gone. A docs site is expected when the repo's task-plus.yml has a pages_deploy target or when docs_url is set by hand. An rsync target's site: fills an empty docs_url as https://<site>.docs.bytestone.uk/; a type: statichost target means the deploy config has not been migrated yet and is red. Set statichost_site in repos.json when the old name was irregular.
  4. Local mirror — a pull mirror of the repo exists on the home Forgejo. Yellow if there is a copy that is not a mirror. Only checked when the home network is reachable and HOMELAB_FORGEJO_TOKEN is set (tp secrets task refresh); otherwise the previous value is kept.

Flag 2 is worked through with tp secrets task codeberg: it lists every repo still on Codeberg and checks that each Codeberg branch head exists in a local checkout under ~/git/*/<name> and in the repo on git.bytestone.uk (the home mirror is reported too). Only repos passing both checks, or empty on Codeberg, are deleted, and only with -- -delete. A repo renamed elsewhere is checked with -- -only old -as new.

Flag 4 is fixed with tp secrets task mirror (-- -dry-run to preview): it creates a private pull mirror on the home Forgejo for every public repo that lacks one, cloning from Forgejo or, for GitHub-only repos, GitHub. Existing plain copies are reported and left alone.

Flags 1–3 are temporary: they track the move to Forgejo + docs.bytestone.uk and will be removed once every repo is green (a GitHub Pages flag was retired on 2026-09-22 once every Pages site had been deleted). The refresh command also records whether each repo has a task-plus.yml (tp_config), which drives the ⚠️ marker in the diagram.

Documentation https://dashboard.docs.bytestone.uk/
Source https://git.bytestone.uk/hum3/dashboard