No permanent backend
Collection runs in GitHub Actions and produces a JSON snapshot embedded in the Pages artifact.
Architectural case study · engineering intelligence
Repo Control Center started from a simple operational problem: as the number of repositories grows, CI, delivery, releases, security, packages, and activity become too scattered to form a reliable view of the whole. The solution collects evidence outside the browser, makes incomplete information explicit, and publishes a static snapshot for inspection.
The dashboard is read-only. Tokens used for collection remain inside GitHub Actions and are never sent to the published SPA.
Problem
Builds, deployments, releases, activity, alerts, packages, and open work exist across different surfaces and APIs. Opening repositories one by one works while the set is small; beyond that point, finding context becomes operational overhead itself.
The challenge was not simply to build another visual dashboard. It was to establish a common language for repository state without turning missing data into failure, and without adding permanent infrastructure just to aggregate signals that change at a relatively low frequency.
Constraints and quality attributes
Collection runs in GitHub Actions and produces a JSON snapshot embedded in the Pages artifact.
The SPA consumes static data only. Tokens and permissions remain inside the automation environment.
Each repository reports complete, partial, or unavailable collection plus confidence derived from source coverage.
Optional queries may fail without blocking publication of the remaining repositories; degradation remains explicit.
Architectural decisions
The Node.js collector queries APIs during the workflow, paginates responses, bounds concurrency, and normalizes evidence before publication.
Trade-off: updates are periodic rather than real-time.
The published JSON decouples the SPA from authenticated APIs and turns collection into a reproducible read contract.
Trade-off: the UI represents the last successful workflow state.
The interface provides filters, search, repository details, and aggregate insights without an application service running continuously.
Trade-off: detailed routes use hashes and all content depends on the published snapshot.
complete, partial, and unavailable describe collection observability; repository health remains a separate classification.
Trade-off: the UI must communicate uncertainty instead of collapsing everything into one color.
CI, quality, security, mutation, delivery, release, Pages, and maintenance represent different roles; only the appropriate signal should affect build and delivery status.
Trade-off: heuristics need explicit overrides when names do not express intent.
Dependabot, code scanning, security workflows, and OpenSSF Scorecard remain separate signals. Lack of access lowers confidence rather than becoming a security claim.
Trade-off: the result is more honest but less simplistic.
Flow
Trade-offs and limits
The current schedule refreshes roughly every hour. That is sufficient for portfolio maintenance but does not replace production monitoring.
Deployments outside GitHub may not appear; versions remain blank when no trustworthy association with delivery exists.
Actions, Deployments, and security alerts may require additional permissions. Missing access is reported as reduced confidence.
Thirty-day metrics are recomputed from the current collection window. Temporal trends require persistence of previous snapshots.
Workflow names outside conventions may remain unknown. Per-repository configuration acts as an explicit override.
Some headers and hosting behavior are not controlled by the application and must be treated as platform responsibility.
Public evidence
Architectural reading
The central lesson is not “how to build a dashboard.” Consolidating engineering signals requires preserving the difference between absence, collection failure, negative evidence, and positive evidence. Without that distinction, a simple interface can produce an incorrect interpretation of the portfolio.
By making coverage and confidence explicit, Repo Control Center treats the quality of observation itself as part of the domain — reducing false diagnoses while remaining useful when not every source is available.