Roll up analytics across repos

See every product repo that uses your design system in one ranked view — system score, on-system share, drift, contrast, readiness and freshness — built on your machine from the history each repo already records.

What you’ll learn: rollup

What you’ll learn

Most design-system teams serve more than one product. Each repo’s dashboard tells you how that repo is doing; the question a design-system manager gets asked is different: which teams are on the system, and which are falling behind? ds-bridge rollup answers it. It reads the history that each repo has already recorded and ranks the repos side by side. It runs on your machine, reads only what was recorded, and never writes into a repo.

Setup

You’ll need the ds-bridge plugin and a local clone of each repo you want to compare. Each repo needs some recorded history — run ds-bridge record in it, or set up CI recording first (Track design-system health over time, step 2).

# Install the plugin, if you haven't yet.
claude plugin install ds-bridge

Each step shows the slash command to use in Claude Code and the ds-bridge CLI command it wraps. Use whichever you prefer.

Steps

  1. Fetch the CI history. If a repo records in CI, its history lives on the ds-bridge-data branch. The rollup reads that branch from your clone, so fetch it first — a branch is only as fresh as your last fetch:

    git -C ../web fetch origin ds-bridge-data
    git -C ../ios fetch origin ds-bridge-data
    
  2. Run a first rollup. Name each repo as a folder (its working copy’s history), a history file, or a folder plus a git ref after @:

    ds-bridge rollup ../web@origin/ds-bridge-data ../ios@origin/ds-bridge-data ../admin
    

    You get one row per repo, ranked by system score: the score, a trend sparkline, on-system share, drift (stale, missing and orphaned tokens), contrast, handoff readiness and how fresh the data is. Above the table sit a plain mean, a size-weighted score (repos with more measured style values count for more) and the number of stale repos.

  3. Save the list, with teams. So you don’t retype the sources, list them once in .ds-bridge/rollup.json in the repo you run the rollup from. Relative paths are read from that project’s folder:

    [
      { "name": "web", "source": "../web@origin/ds-bridge-data", "team": "Web" },
      { "name": "ios", "source": "../ios@origin/ds-bridge-data", "team": "Mobile" },
      { "name": "admin", "source": "../admin" }
    ]
    

    Now a plain ds-bridge rollup (or /ds-bridge:rollup in Claude Code) reads it, and adds a breakdown by team.

  4. Read the notes. A repo that can’t be read never stops the rollup — it gets a note on its row instead: no history yet, a history written before the current format (ds-bridge history migrate in that repo upgrades it), or a branch that couldn’t be read (fetch it again). A dash means a number was never recorded for that repo; it is not a zero.

  5. Share it. Markdown pastes into a pull request, an issue or a monthly update; HTML is one offline page you can send to anyone; JSON is for your own scripts:

    ds-bridge rollup --format md
    ds-bridge rollup --format html --out org-rollup.html
    ds-bridge rollup --format json
    
  6. Drill into one repo. To see why a repo ranks where it does, render its own dashboard in the org view:

    ds-bridge report ../web --view org --open
    

    That view uses the repo’s own score weights and its working copy’s history, so its score can differ from the rollup row.

Result

> /ds-bridge:rollupexample · 4 demo repos
Repos4
Mean score76
Size-weighted85
Pooled on-system93%
  1. sds-dashboard89on-system 97% · contrast 80% · readiness 86
  2. primer-hub76on-system 76% · contrast 94% · readiness 84
  3. m3-pulse74on-system 81% · contrast 100% · readiness 95
  4. acme-shop63on-system 76% · contrast 95% · readiness 77
Recorded history from several repos, ranked by system score — local only, nothing hosted.

You now have one ranked view of every repo that uses your design system, built from history that each repo records on its own. Saved in .ds-bridge/rollup.json, it is one command away every week, and the markdown and HTML versions are ready to share.

Troubleshooting