No successful ingest yet. Run the OpenDev worker, then refresh. Visitor pages never call GitHub.
How it works
Build analytics once. Deliver them three ways.
GitHub → ingestion → Postgres → Embedded Canvas → public OpenDev, a customer product, and internal operations. OpenDev is the host. Embedded Canvas owns the semantic layer, the hosted runtime, and tenant isolation.
The pipeline
GitHub public data is ingested by a worker. Visitor page loads never call GitHub.
Postgres is the warehouse: orgs, repos, PRs, issues, commits, reviews.
Embedded Canvas connects to that warehouse, owns the semantic layer where metrics are defined, and hosts the dashboard runtime that serves every chart on this site.
Two read paths share those definitions: the dashboards OpenDev embeds, and a governed metrics API the host queries directly for the KPI cards above each chart. Neither path recomputes a metric in the host.
Three audiences reuse the same dashboards: public OpenDev (unscoped session + host filters), DevMetrics customer (RLS on org_id), DevMetrics internal (skipTenantRls).
The same metrics, three surfaces
median_cycle_time
Median PR cycle time
percentile_cont(0.5) of (merged_at - created_at) in hours