# christopherharris13/nfl-dashboard architecture

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

- Interactive diagram: https://gitdiagram.com/christopherharris13/nfl-dashboard
- Repository: https://github.com/christopherharris13/nfl-dashboard

## Overview

GridironOps turns intentionally dirty NFL and wellness data into a quality-checked Postgres warehouse, with Airflow orchestrating extraction through reporting. The graph preserves the documented vendor and public-feed inputs, Bronze/Silver/Gold stages, identity resolution, validation and quarantine, and the Power BI consumer. The file tree includes the Airflow and mock-vendor code but not the documented dbt, warehouse SQL, or Power BI files, so those subsystems are represented using only documented behavior; their internal wiring is not expanded.

Main entry points: [`airflow/dags/nfl_medallion.py`](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/dags/nfl_medallion.py) (Medallion DAG), [`airflow/plugins/silver`](https://github.com/christopherharris13/nfl-dashboard/tree/main/airflow/plugins/silver) (Source transforms), [`airflow/plugins/extract.py`](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/extract.py) (Extract and land), [`airflow/plugins/silver/player_master.py`](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/silver/player_master.py) (Player master)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_inputs["Data Inputs"]
  node_vendor_services["Mock vendors"]
  node_nflverse["nflverse"]
  node_open_meteo["Open-Meteo"]
end

subgraph group_orchestration["Airflow Pipeline"]
  node_airflow_dag["Medallion DAG<br/>[nfl_medallion.py]"]
  node_extract["Extract and land<br/>[extract.py]"]
  node_schema_staging["Schema and staging"]
end

subgraph group_silver_quality["Silver and Quality"]
  node_identity["Player identity<br/>[identity.py]"]
  node_player_master["Player master<br/>[player_master.py]"]
  node_silver_transforms["Source transforms"]
  node_validation["Expectation validation<br/>[validate.py]"]
  node_dq_summary["DQ scorecard<br/>[summary.py]"]
end

subgraph group_warehouse["Warehouse and Reporting"]
  node_bronze[("Bronze")]
  node_silver[("Silver")]
  node_quarantine[("Quarantine")]
  node_dbt_gold["Gold models"]
  node_gold[("Gold")]
  node_powerbi["Power BI report"]
end

node_airflow_dag -->|"invokes"| node_extract
node_vendor_services -->|"serves records"| node_extract
node_nflverse -->|"provides feeds"| node_extract
node_open_meteo -->|"provides forecast"| node_extract
node_extract -->|"writes raw payloads"| node_bronze
node_airflow_dag -->|"applies schema"| node_schema_staging
node_schema_staging -->|"reads"| node_bronze
node_schema_staging -->|"creates staging views"| node_silver
node_airflow_dag -->|"runs checks"| node_validation
node_validation -->|"validates staging"| node_silver
node_validation -->|"routes failing rows"| node_quarantine
node_airflow_dag -->|"builds"| node_player_master
node_player_master -->|"reads roster data"| node_bronze
node_player_master -->|"resolves players"| node_identity
node_player_master -->|"persists player map"| node_silver
node_airflow_dag -->|"runs transforms"| node_silver_transforms
node_silver_transforms -->|"resolves players"| node_identity
node_silver_transforms -->|"reads source rows"| node_bronze
node_silver_transforms -->|"rebuilds facts"| node_silver
node_silver_transforms -->|"records identity failures"| node_quarantine
node_airflow_dag -->|"writes summary"| node_dq_summary
node_dq_summary -->|"reconciles run results"| node_silver
node_airflow_dag -->|"runs dbt stages"| node_dbt_gold
node_dbt_gold -->|"reads"| node_silver
node_dbt_gold -->|"builds models"| node_gold
node_gold -->|"feeds report"| node_powerbi

click node_vendor_services "https://github.com/christopherharris13/nfl-dashboard/tree/main/mock_vendors"
click node_airflow_dag "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/dags/nfl_medallion.py"
click node_extract "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/extract.py"
click node_identity "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/identity.py"
click node_player_master "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/silver/player_master.py"
click node_silver_transforms "https://github.com/christopherharris13/nfl-dashboard/tree/main/airflow/plugins/silver"
click node_validation "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/dq/validate.py"
click node_dq_summary "https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/dq/summary.py"

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_vendor_services,node_nflverse,node_open_meteo toneBlue
class node_airflow_dag,node_extract,node_schema_staging toneAmber
class node_identity,node_player_master,node_silver_transforms,node_validation,node_dq_summary toneMint
class node_bronze,node_silver,node_quarantine,node_dbt_gold,node_gold,node_powerbi toneRose
```

## Components

### Data Inputs

- [Mock vendors](https://github.com/christopherharris13/nfl-dashboard/tree/main/mock_vendors): `mock_vendors`
- **nflverse**
- **Open-Meteo**

### Airflow Pipeline

- [Medallion DAG](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/dags/nfl_medallion.py): `airflow/dags/nfl_medallion.py`
- [Extract and land](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/extract.py): `airflow/plugins/extract.py`
- **Schema and staging**

### Silver and Quality

- [Player identity](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/identity.py): `airflow/plugins/identity.py`
- [Player master](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/silver/player_master.py): `airflow/plugins/silver/player_master.py`
- [Source transforms](https://github.com/christopherharris13/nfl-dashboard/tree/main/airflow/plugins/silver): `airflow/plugins/silver`
- [Expectation validation](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/dq/validate.py): `airflow/plugins/dq/validate.py`
- [DQ scorecard](https://github.com/christopherharris13/nfl-dashboard/blob/main/airflow/plugins/dq/summary.py): `airflow/plugins/dq/summary.py`

### Warehouse and Reporting

- **Bronze**
- **Silver**
- **Quarantine**
- **Gold models**
- **Gold**
- **Power BI report**

## Connections

- Medallion DAG → Extract and land: invokes
- Mock vendors → Extract and land: serves records
- nflverse → Extract and land: provides feeds
- Open-Meteo → Extract and land: provides forecast
- Extract and land → Bronze: writes raw payloads
- Medallion DAG → Schema and staging: applies schema
- Schema and staging → Bronze: reads
- Schema and staging → Silver: creates staging views
- Medallion DAG → Expectation validation: runs checks
- Expectation validation → Silver: validates staging
- Expectation validation → Quarantine: routes failing rows
- Medallion DAG → Player master: builds
- Player master → Bronze: reads roster data
- Player master → Player identity: resolves players
- Player master → Silver: persists player map
- Medallion DAG → Source transforms: runs transforms
- Source transforms → Player identity: resolves players
- Source transforms → Bronze: reads source rows
- Source transforms → Silver: rebuilds facts
- Source transforms → Quarantine: records identity failures
- Medallion DAG → DQ scorecard: writes summary
- DQ scorecard → Silver: reconciles run results
- Medallion DAG → Gold models: runs dbt stages
- Gold models → Silver: reads
- Gold models → Gold: builds models
- Gold → Power BI report: feeds report
