# microsoft/analytics-hub architecture

> Architecture diagram of the GitHub repository microsoft/analytics-hub, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-28). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/microsoft/analytics-hub
- Repository: https://github.com/microsoft/analytics-hub

## Overview

Analytics Hub is a public catalog and companion site for Microsoft Copilot and AI adoption analytics resources. Visitors browse use cases, data sources, reports, and standalone tools; the main application resources are linked downloads or external repositories, rather than one shared analytics runtime. A distinct subsystem monitors Microsoft product documentation and presents searchable change feeds. The map also includes the browser-based FinOps tools and anonymous video-statistics service visible in the tree. Relationships for unsampled pages are limited to documented capabilities and paths.

Main entry points: [`tools/video-analytics/worker.js`](https://github.com/microsoft/analytics-hub/blob/main/tools/video-analytics/worker.js) (Beacon collector), [`tools/learning-feed/snapshots`](https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/snapshots) (Feed snapshots), [`tools/learning-feed/scan.js`](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/scan.js) (Change scanner), [`tools/learning-feed/feeds`](https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/feeds) (Feed definitions)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_hub["Analytics Hub"]
  node_home["Hub home<br/>[index.html]"]
  node_toolfinder["Tool finder<br/>[index.html]"]
  node_toolregistry["Tool registry<br/>[index.html]"]
  node_reports["Report catalog<br/>[index.html]"]
  node_explorer["Report explorer<br/>[index.html]"]
  node_sources["Data sources<br/>[index.html]"]
  node_cases["Case studies<br/>[index.html]"]
  node_externaltools["Standalone resources"]
  node_community["Community hub<br/>[index.html]"]
end

subgraph group_watcher["Documentation Watcher"]
  node_learnfeeds["Learning feeds<br/>[index.html]"]
  node_feedconfig["Feed definitions"]
  node_discovery["Page discovery<br/>[discover.js]"]
  node_scanner["Change scanner<br/>[scan.js]"]
  node_snapshots[("Feed snapshots")]
  node_feedbuilder["Feed data builder<br/>[build-feed-data.js]"]
  node_feeddata[("Unified feed data<br/>[feed-data.json]")]
  node_statusgen["Status generator<br/>[status.js]"]
  node_statusdata[("Feed status<br/>[status.json]")]
  node_searchgen["Search index builder<br/>[search-index.js]"]
  node_searchdata[("Search index<br/>[search-index.json]")]
  node_searchpage["Feed search<br/>[index.html]"]
end

subgraph group_finops["FinOps Tools"]
  node_finopsapps["FinOps applications"]
end

subgraph group_video["Video Analytics"]
  node_videopage["Video pages"]
  node_collector["Beacon collector<br/>[worker.js]"]
  node_kv[("Video stats KV")]
  node_dashboard["Stats dashboard<br/>[worker.js]"]
end

node_visitor(("Site visitor"))
node_docsources["Microsoft docs"]
node_finopsuser(("FinOps practitioner"))

node_visitor -->|"browses"| node_home
node_visitor -->|"finds a tool"| node_toolfinder
node_visitor -->|"browses reports"| node_reports
node_visitor -->|"explores reports"| node_explorer
node_visitor -->|"checks sources"| node_sources
node_visitor -->|"reads cases"| node_cases
node_visitor -->|"visits"| node_community
node_toolfinder -->|"lists tools"| node_toolregistry
node_toolfinder -->|"links resources"| node_externaltools
node_reports -->|"links reports"| node_externaltools
node_sources -->|"describes inputs"| node_externaltools
node_community -->|"links feeds"| node_learnfeeds
node_docsources -->|"provides documentation"| node_discovery
node_feedconfig -->|"configures discovery"| node_discovery
node_discovery -->|"expands watched pages"| node_scanner
node_feedconfig -->|"configures scans"| node_scanner
node_docsources -->|"provides pages"| node_scanner
node_scanner -->|"writes snapshots"| node_snapshots
node_snapshots -->|"provides scan results"| node_feedbuilder
node_feedbuilder -->|"writes feed data"| node_feeddata
node_feeddata -->|"supplies changes"| node_learnfeeds
node_snapshots -->|"provides scan results"| node_statusgen
node_statusgen -->|"writes status"| node_statusdata
node_statusdata -->|"supplies status"| node_learnfeeds
node_snapshots -->|"provides snapshots"| node_searchgen
node_feedconfig -->|"provides feed metadata"| node_searchgen
node_searchgen -->|"writes index"| node_searchdata
node_searchdata -->|"loads index"| node_searchpage
node_visitor -->|"searches changes"| node_searchpage
node_finopsuser -->|"uses calculators"| node_finopsapps
node_videopage -.->|"posts beacons"| node_collector
node_collector -->|"updates tallies"| node_kv
node_collector -->|"reads tallies"| node_kv
node_visitor -->|"views statistics"| node_dashboard
node_dashboard -->|"requests statistics"| node_collector
node_collector -->|"serves statistics"| node_dashboard

click node_home "https://github.com/microsoft/analytics-hub/blob/main/docs/index.html"
click node_toolfinder "https://github.com/microsoft/analytics-hub/blob/main/docs/find-a-tool/index.html"
click node_toolregistry "https://github.com/microsoft/analytics-hub/blob/main/docs/find-a-tool/index.html"
click node_reports "https://github.com/microsoft/analytics-hub/blob/main/docs/choose-report/index.html"
click node_explorer "https://github.com/microsoft/analytics-hub/blob/main/docs/explore-reports/index.html"
click node_sources "https://github.com/microsoft/analytics-hub/blob/main/docs/data-sources/index.html"
click node_cases "https://github.com/microsoft/analytics-hub/blob/main/docs/case-studies/index.html"
click node_community "https://github.com/microsoft/analytics-hub/blob/main/docs/community/index.html"
click node_learnfeeds "https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/index.html"
click node_feedconfig "https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/feeds"
click node_discovery "https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/discover.js"
click node_scanner "https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/scan.js"
click node_snapshots "https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/snapshots"
click node_feedbuilder "https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/build-feed-data.js"
click node_feeddata "https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/feed-data.json"
click node_statusgen "https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/status.js"
click node_statusdata "https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/status.json"
click node_searchgen "https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/search-index.js"
click node_searchdata "https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/search-index.json"
click node_searchpage "https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/search/index.html"
click node_finopsapps "https://github.com/microsoft/analytics-hub/tree/main/docs/cowork-billing"
click node_videopage "https://github.com/microsoft/analytics-hub/tree/main/docs"
click node_collector "https://github.com/microsoft/analytics-hub/blob/main/tools/video-analytics/worker.js"
click node_dashboard "https://github.com/microsoft/analytics-hub/blob/main/tools/video-analytics/worker.js"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_home,node_toolfinder,node_toolregistry,node_reports,node_explorer,node_sources,node_cases,node_externaltools,node_community toneBlue
class node_learnfeeds,node_feedconfig,node_discovery,node_scanner,node_snapshots,node_feedbuilder,node_feeddata,node_statusgen,node_statusdata,node_searchgen,node_searchdata,node_searchpage toneAmber
class node_finopsapps toneMint
class node_videopage,node_collector,node_kv,node_dashboard toneRose
class node_visitor,node_docsources,node_finopsuser toneIndigo
```

## Components

### Analytics Hub

- [Hub home](https://github.com/microsoft/analytics-hub/blob/main/docs/index.html): `docs/index.html`
- [Tool finder](https://github.com/microsoft/analytics-hub/blob/main/docs/find-a-tool/index.html): `docs/find-a-tool/index.html`
- [Tool registry](https://github.com/microsoft/analytics-hub/blob/main/docs/find-a-tool/index.html): `docs/find-a-tool/index.html`
- [Report catalog](https://github.com/microsoft/analytics-hub/blob/main/docs/choose-report/index.html): `docs/choose-report/index.html`
- [Report explorer](https://github.com/microsoft/analytics-hub/blob/main/docs/explore-reports/index.html): `docs/explore-reports/index.html`
- [Data sources](https://github.com/microsoft/analytics-hub/blob/main/docs/data-sources/index.html): `docs/data-sources/index.html`
- [Case studies](https://github.com/microsoft/analytics-hub/blob/main/docs/case-studies/index.html): `docs/case-studies/index.html`
- **Standalone resources**
- [Community hub](https://github.com/microsoft/analytics-hub/blob/main/docs/community/index.html): `docs/community/index.html`

### Documentation Watcher

- [Learning feeds](https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/index.html): `docs/community/learning-feed/index.html`
- [Feed definitions](https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/feeds): `tools/learning-feed/feeds`
- [Page discovery](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/discover.js): `tools/learning-feed/discover.js`
- [Change scanner](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/scan.js): `tools/learning-feed/scan.js`
- [Feed snapshots](https://github.com/microsoft/analytics-hub/tree/main/tools/learning-feed/snapshots): `tools/learning-feed/snapshots`
- [Feed data builder](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/build-feed-data.js): `tools/learning-feed/build-feed-data.js`
- [Unified feed data](https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/feed-data.json): `docs/community/learning-feed/feed-data.json`
- [Status generator](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/status.js): `tools/learning-feed/status.js`
- [Feed status](https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/status.json): `docs/community/learning-feed/status.json`
- [Search index builder](https://github.com/microsoft/analytics-hub/blob/main/tools/learning-feed/search-index.js): `tools/learning-feed/search-index.js`
- [Search index](https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/search-index.json): `docs/community/learning-feed/search-index.json`
- [Feed search](https://github.com/microsoft/analytics-hub/blob/main/docs/community/learning-feed/search/index.html): `docs/community/learning-feed/search/index.html`

### FinOps Tools

- [FinOps applications](https://github.com/microsoft/analytics-hub/tree/main/docs/cowork-billing): `docs/cowork-billing`

### Video Analytics

- [Video pages](https://github.com/microsoft/analytics-hub/tree/main/docs): `docs`
- [Beacon collector](https://github.com/microsoft/analytics-hub/blob/main/tools/video-analytics/worker.js): `tools/video-analytics/worker.js`
- **Video stats KV**
- [Stats dashboard](https://github.com/microsoft/analytics-hub/blob/main/tools/video-analytics/worker.js): `tools/video-analytics/worker.js`

### Other components

- **Site visitor**
- **Microsoft docs**
- **FinOps practitioner**

## Connections

- Site visitor → Hub home: browses
- Site visitor → Tool finder: finds a tool
- Site visitor → Report catalog: browses reports
- Site visitor → Report explorer: explores reports
- Site visitor → Data sources: checks sources
- Site visitor → Case studies: reads cases
- Site visitor → Community hub: visits
- Tool finder → Tool registry: lists tools
- Tool finder → Standalone resources: links resources
- Report catalog → Standalone resources: links reports
- Data sources → Standalone resources: describes inputs
- Community hub → Learning feeds: links feeds
- Microsoft docs → Page discovery: provides documentation
- Feed definitions → Page discovery: configures discovery
- Page discovery → Change scanner: expands watched pages
- Feed definitions → Change scanner: configures scans
- Microsoft docs → Change scanner: provides pages
- Change scanner → Feed snapshots: writes snapshots
- Feed snapshots → Feed data builder: provides scan results
- Feed data builder → Unified feed data: writes feed data
- Unified feed data → Learning feeds: supplies changes
- Feed snapshots → Status generator: provides scan results
- Status generator → Feed status: writes status
- Feed status → Learning feeds: supplies status
- Feed snapshots → Search index builder: provides snapshots
- Feed definitions → Search index builder: provides feed metadata
- Search index builder → Search index: writes index
- Search index → Feed search: loads index
- Site visitor → Feed search: searches changes
- FinOps practitioner → FinOps applications: uses calculators
- Video pages → Beacon collector: posts beacons
- Beacon collector → Video stats KV: updates tallies
- Beacon collector → Video stats KV: reads tallies
- Site visitor → Stats dashboard: views statistics
- Stats dashboard → Beacon collector: requests statistics
- Beacon collector → Stats dashboard: serves statistics
