# numbats/af architecture

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

- Interactive diagram: https://gitdiagram.com/numbats/af
- Repository: https://github.com/numbats/af

## Overview

This repository is a Quarto-based forecasting course site: learners use its weekly teaching materials, practice activities, assignments, quizzes, and exams. A second branch provides interactive exercises through locally defined Quarto extensions and bundled browser runtimes. The tree supports identifying these content areas, but no README or course-source excerpts document most runtime wiring, so inferred workflow links are dashed. The sampled service-worker source does show its dependency on the external webR service; generated vendor libraries are included only as browser-runtime components.

Main entry points: [`index.qmd`](https://github.com/numbats/af/blob/main/index.qmd) (Course homepage), [`_extensions/learnr-academy/webr-teachr/webr-serviceworker.js`](https://github.com/numbats/af/blob/main/_extensions/learnr-academy/webr-teachr/webr-serviceworker.js) (WebR service worker), [`week1`](https://github.com/numbats/af/tree/main/week1) (Weekly lessons), [`assignments`](https://github.com/numbats/af/tree/main/assignments) (Assignments)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_course["Course content"]
  node_homepage["Course homepage<br/>[index.qmd]"]
  node_weekly["Weekly lessons"]
  node_slides["Lecture slides"]
  node_handouts["Topic handouts"]
  node_solutions["Exercise solutions<br/>[other-ex-sol.qmd]"]
end

subgraph group_assessment["Assessment"]
  node_assignments["Assignments"]
  node_quizzes["Weekly quizzes<br/>[weekly_quizzes.qmd]"]
  node_exams["Exams<br/>[index.qmd]"]
  node_competition["Course competition<br/>[competition.qmd]"]
end

subgraph group_interactive["Interactive learning"]
  node_learnr["Learnr exercises"]
  node_webr["WebR exercises"]
  node_live["Live exercises"]
end

subgraph group_runtime["Browser runtime"]
  node_pyodide["Pyodide worker<br/>[pyodide-worker.js]"]
  node_webworker["WebR worker<br/>[webr-worker.js]"]
  node_serviceworker["WebR service worker"]
  node_htmlwidgets["HTMLWidgets runtime<br/>[htmlwidgets.js]"]
  node_datatable["DataTables binding<br/>[datatables.js]"]
  node_crosstalk["Crosstalk runtime<br/>[crosstalk.js]"]
  node_jquery["jQuery library<br/>[jquery-3.6.0.js]"]
end

node_learner(("Learner"))
node_webrservice["WebR service"]

node_learner -.->|"opens course"| node_homepage
node_homepage -.->|"offers lessons"| node_weekly
node_learner -.->|"completes work"| node_assignments
node_learner -.->|"takes quizzes"| node_quizzes
node_learner -.->|"reviews exams"| node_exams
node_learner -.->|"joins competition"| node_competition
node_serviceworker -->|"imports script"| node_webrservice

click node_homepage "https://github.com/numbats/af/blob/main/index.qmd"
click node_weekly "https://github.com/numbats/af/tree/main/week1"
click node_slides "https://github.com/numbats/af/tree/main/slides"
click node_handouts "https://github.com/numbats/af/tree/main/handouts"
click node_solutions "https://github.com/numbats/af/blob/main/other-ex-sol.qmd"
click node_assignments "https://github.com/numbats/af/tree/main/assignments"
click node_quizzes "https://github.com/numbats/af/blob/main/assignments/weekly_quizzes.qmd"
click node_exams "https://github.com/numbats/af/blob/main/exams/index.qmd"
click node_competition "https://github.com/numbats/af/blob/main/assignments/competition.qmd"
click node_learnr "https://github.com/numbats/af/tree/main/_extensions/learnr-academy"
click node_webr "https://github.com/numbats/af/tree/main/_extensions/learnr-academy/webr-teachr"
click node_live "https://github.com/numbats/af/tree/main/_extensions/r-wasm/live"
click node_pyodide "https://github.com/numbats/af/blob/main/_extensions/r-wasm/live/resources/pyodide-worker.js"
click node_webworker "https://github.com/numbats/af/blob/main/_extensions/learnr-academy/webr-teachr/webr-worker.js"
click node_serviceworker "https://github.com/numbats/af/blob/main/_extensions/learnr-academy/webr-teachr/webr-serviceworker.js"
click node_htmlwidgets "https://github.com/numbats/af/blob/main/_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js"
click node_datatable "https://github.com/numbats/af/blob/main/_freeze/site_libs/datatables-binding-0.34.0/datatables.js"
click node_crosstalk "https://github.com/numbats/af/blob/main/_freeze/site_libs/crosstalk-1.2.2/js/crosstalk.js"
click node_jquery "https://github.com/numbats/af/blob/main/_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.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_homepage,node_weekly,node_slides,node_handouts,node_solutions toneBlue
class node_assignments,node_quizzes,node_exams,node_competition toneAmber
class node_learnr,node_webr,node_live toneMint
class node_pyodide,node_webworker,node_serviceworker,node_htmlwidgets,node_datatable,node_crosstalk,node_jquery toneRose
class node_learner,node_webrservice toneIndigo
```

## Components

### Course content

- [Course homepage](https://github.com/numbats/af/blob/main/index.qmd): `index.qmd`
- [Weekly lessons](https://github.com/numbats/af/tree/main/week1): `week1`
- [Lecture slides](https://github.com/numbats/af/tree/main/slides): `slides`
- [Topic handouts](https://github.com/numbats/af/tree/main/handouts): `handouts`
- [Exercise solutions](https://github.com/numbats/af/blob/main/other-ex-sol.qmd): `other-ex-sol.qmd`

### Assessment

- [Assignments](https://github.com/numbats/af/tree/main/assignments): `assignments`
- [Weekly quizzes](https://github.com/numbats/af/blob/main/assignments/weekly_quizzes.qmd): `assignments/weekly_quizzes.qmd`
- [Exams](https://github.com/numbats/af/blob/main/exams/index.qmd): `exams/index.qmd`
- [Course competition](https://github.com/numbats/af/blob/main/assignments/competition.qmd): `assignments/competition.qmd`

### Interactive learning

- [Learnr exercises](https://github.com/numbats/af/tree/main/_extensions/learnr-academy): `_extensions/learnr-academy`
- [WebR exercises](https://github.com/numbats/af/tree/main/_extensions/learnr-academy/webr-teachr): `_extensions/learnr-academy/webr-teachr`
- [Live exercises](https://github.com/numbats/af/tree/main/_extensions/r-wasm/live): `_extensions/r-wasm/live`

### Browser runtime

- [Pyodide worker](https://github.com/numbats/af/blob/main/_extensions/r-wasm/live/resources/pyodide-worker.js): `_extensions/r-wasm/live/resources/pyodide-worker.js`
- [WebR worker](https://github.com/numbats/af/blob/main/_extensions/learnr-academy/webr-teachr/webr-worker.js): `_extensions/learnr-academy/webr-teachr/webr-worker.js`
- [WebR service worker](https://github.com/numbats/af/blob/main/_extensions/learnr-academy/webr-teachr/webr-serviceworker.js): `_extensions/learnr-academy/webr-teachr/webr-serviceworker.js`
- [HTMLWidgets runtime](https://github.com/numbats/af/blob/main/_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js): `_freeze/site_libs/htmlwidgets-1.6.4/htmlwidgets.js`
- [DataTables binding](https://github.com/numbats/af/blob/main/_freeze/site_libs/datatables-binding-0.34.0/datatables.js): `_freeze/site_libs/datatables-binding-0.34.0/datatables.js`
- [Crosstalk runtime](https://github.com/numbats/af/blob/main/_freeze/site_libs/crosstalk-1.2.2/js/crosstalk.js): `_freeze/site_libs/crosstalk-1.2.2/js/crosstalk.js`
- [jQuery library](https://github.com/numbats/af/blob/main/_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js): `_freeze/site_libs/jquery-3.6.0/jquery-3.6.0.js`

### Other components

- **Learner**
- **WebR service**

## Connections

- Learner → Course homepage: opens course
- Course homepage → Weekly lessons: offers lessons
- Learner → Assignments: completes work
- Learner → Weekly quizzes: takes quizzes
- Learner → Exams: reviews exams
- Learner → Course competition: joins competition
- WebR service worker → WebR service: imports script (evidence: `_extensions/learnr-academy/webr-teachr/webr-serviceworker.js`)
