# eriwinsto/ak-results-2026 architecture

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

- Interactive diagram: https://gitdiagram.com/eriwinsto/ak-results-2026
- Repository: https://github.com/eriwinsto/ak-results-2026

## Overview

This repository produces and publishes a static Alaska election-results experience. The main workflow transforms Division precinct results into race data, then serves it alongside map geometry and basemap data for the reader-facing page. Separate stages prepare ranked-choice rounds and geography; the page also offers race tabs, map views, balance-of-power, and Grove embedding. Source excerpts establish the data-building behavior, while page-level interactions and some data reads are documented in the README rather than sampled source.

Main entry points: [`site/index.html`](https://github.com/eriwinsto/ak-results-2026/blob/main/site/index.html) (Results page), [`scripts/build_data.py`](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_data.py) (Results builder), [`scripts/build_rcv.py`](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_rcv.py) (Ranked-choice builder), [`site/data/results.json`](https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/results.json) (Race results data)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_preparation["Data preparation"]
  node_config["Election configuration"]
  node_results_builder["Results builder<br/>[build_data.py]"]
  node_rcv_builder["Ranked-choice builder<br/>[build_rcv.py]"]
  node_geo_builder["Precinct geometry builder<br/>[build_geo.py]"]
  node_base_builder["Basemap builder<br/>[build_base.py]"]
end

subgraph group_published["Published data"]
  node_results_data["Race results data<br/>[results.json]"]
  node_rcv_data["Ranked-choice data"]
  node_geo_data["District geometry<br/>[geo.json]"]
  node_base_data["Basemap layers<br/>[base.json]"]
end

subgraph group_experience["Reader experience"]
  node_results_page["Results page<br/>[index.html]"]
  node_embed_snippet["Grove embed snippet<br/>[grove-embed.html]"]
end

node_division["Division results CSV"]
node_rctab["RCTab reports"]
node_reader(("Election reader"))
node_grove(("Grove host"))

node_division -->|"provides CSV"| node_results_builder
node_config -->|"configures races"| node_results_builder
node_results_builder -->|"writes results"| node_results_data
node_rctab -->|"provides report"| node_rcv_builder
node_results_data -->|"matches candidate names"| node_rcv_builder
node_rcv_builder -->|"writes rounds"| node_rcv_data
node_geo_builder -->|"writes geometry"| node_geo_data
node_geo_data -->|"supplies precincts"| node_base_builder
node_base_builder -->|"writes layers"| node_base_data
node_reader -->|"views results"| node_results_page
node_results_page -->|"reads results"| node_results_data
node_results_page -->|"shows rounds"| node_rcv_data
node_results_page -->|"renders map"| node_geo_data
node_results_page -->|"renders basemap"| node_base_data
node_grove -->|"hosts embed"| node_embed_snippet
node_embed_snippet -->|"embeds page"| node_results_page

click node_config "https://github.com/eriwinsto/ak-results-2026/tree/main/config"
click node_results_builder "https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_data.py"
click node_rcv_builder "https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_rcv.py"
click node_geo_builder "https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_geo.py"
click node_base_builder "https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_base.py"
click node_results_data "https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/results.json"
click node_rcv_data "https://github.com/eriwinsto/ak-results-2026/tree/main/site/data/rcv"
click node_geo_data "https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/geo.json"
click node_base_data "https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/base.json"
click node_results_page "https://github.com/eriwinsto/ak-results-2026/blob/main/site/index.html"
click node_embed_snippet "https://github.com/eriwinsto/ak-results-2026/blob/main/grove-embed.html"

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_config,node_results_builder,node_rcv_builder,node_geo_builder,node_base_builder toneBlue
class node_results_data,node_rcv_data,node_geo_data,node_base_data toneAmber
class node_results_page,node_embed_snippet toneMint
class node_division,node_rctab,node_reader,node_grove toneIndigo
```

## Components

### Data preparation

- [Election configuration](https://github.com/eriwinsto/ak-results-2026/tree/main/config): `config`
- [Results builder](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_data.py): `scripts/build_data.py`
- [Ranked-choice builder](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_rcv.py): `scripts/build_rcv.py`
- [Precinct geometry builder](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_geo.py): `scripts/build_geo.py`
- [Basemap builder](https://github.com/eriwinsto/ak-results-2026/blob/main/scripts/build_base.py): `scripts/build_base.py`

### Published data

- [Race results data](https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/results.json): `site/data/results.json`
- [Ranked-choice data](https://github.com/eriwinsto/ak-results-2026/tree/main/site/data/rcv): `site/data/rcv`
- [District geometry](https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/geo.json): `site/data/geo.json`
- [Basemap layers](https://github.com/eriwinsto/ak-results-2026/blob/main/site/data/base.json): `site/data/base.json`

### Reader experience

- [Results page](https://github.com/eriwinsto/ak-results-2026/blob/main/site/index.html): `site/index.html`
- [Grove embed snippet](https://github.com/eriwinsto/ak-results-2026/blob/main/grove-embed.html): `grove-embed.html`

### Other components

- **Division results CSV**
- **RCTab reports**
- **Election reader**
- **Grove host**

## Connections

- Division results CSV → Results builder: provides CSV (evidence: `README.md`)
- Election configuration → Results builder: configures races (evidence: `scripts/build_data.py`)
- Results builder → Race results data: writes results (evidence: `scripts/build_data.py`)
- RCTab reports → Ranked-choice builder: provides report (evidence: `README.md`)
- Race results data → Ranked-choice builder: matches candidate names (evidence: `scripts/build_rcv.py`)
- Ranked-choice builder → Ranked-choice data: writes rounds (evidence: `scripts/build_rcv.py`)
- Precinct geometry builder → District geometry: writes geometry (evidence: `scripts/build_geo.py`)
- District geometry → Basemap builder: supplies precincts (evidence: `scripts/build_base.py`)
- Basemap builder → Basemap layers: writes layers (evidence: `scripts/build_base.py`)
- Election reader → Results page: views results (evidence: `README.md`)
- Results page → Race results data: reads results (evidence: `README.md`)
- Results page → Ranked-choice data: shows rounds (evidence: `README.md`)
- Results page → District geometry: renders map (evidence: `README.md`)
- Results page → Basemap layers: renders basemap (evidence: `README.md`)
- Grove host → Grove embed snippet: hosts embed (evidence: `README.md`)
- Grove embed snippet → Results page: embeds page (evidence: `README.md`)
