# justaa1/openuil architecture

> Architecture diagram of the GitHub repository justaa1/openuil, 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/justaa1/openuil
- Repository: https://github.com/justaa1/openuil

## Overview

OpenUIL is a browser-based UIL Academics results explorer. Users select competition criteria or search for a student or school; the app retrieves data, derives rankings or history, and presents results in the page. It also supports classification browsing, school-year navigation, regional comparisons, and Science subscores. The tree contains only the page and app script, so components share those paths; the README documents capabilities whose implementation details are not visible in the excerpts. The results fetch is explicit; other data connections are shown only where the excerpts support them.

Main entry points: [`app.js`](https://github.com/justaa1/openuil/blob/main/app.js) (Results lookup), [`index.html`](https://github.com/justaa1/openuil/blob/main/index.html) (Application page)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interface["Web interface"]
  node_page["Application page<br/>[index.html]"]
  node_app["Browser application<br/>[app.js]"]
end

subgraph group_competition["Competition results"]
  node_criteria["Competition criteria<br/>[app.js]"]
  node_resultdata[("Competition dataset")]
  node_resultlookup["Results lookup<br/>[app.js]"]
end

subgraph group_lookup["People and schools"]
  node_personsearch["Student career search<br/>[app.js]"]
  node_searchindex[("Search index")]
  node_careerhistory["Career history<br/>[app.js]"]
  node_schoolsearch["School lookup<br/>[app.js]"]
  node_schoolresults["School year results<br/>[app.js]"]
  node_classification["School classification<br/>[app.js]"]
end

subgraph group_presentation["Results presentation"]
  node_individual["Individual rankings<br/>[app.js]"]
  node_teams["Team rankings<br/>[app.js]"]
  node_science["Science subscores<br/>[app.js]"]
  node_comparison["Regional comparison<br/>[app.js]"]
  node_resultsview["Results views<br/>[app.js]"]
end

node_visitor(("Visitor"))

node_visitor -->|"uses"| node_page
node_page -->|"loads"| node_app
node_app -->|"reads selections"| node_criteria
node_criteria -->|"submits query"| node_resultlookup
node_resultlookup -->|"fetches results"| node_resultdata
node_resultlookup -->|"renders data"| node_individual
node_resultlookup -->|"renders data"| node_teams
node_individual -->|"adds subscores"| node_science
node_individual -->|"supports comparison"| node_comparison
node_visitor -->|"searches student"| node_personsearch
node_personsearch -->|"loads index"| node_searchindex
node_personsearch -->|"shows history"| node_careerhistory
node_visitor -->|"searches school"| node_schoolsearch
node_schoolsearch -->|"browses years"| node_schoolresults
node_visitor -->|"looks up classification"| node_classification
node_resultlookup -->|"updates page"| node_resultsview
node_schoolresults -->|"updates page"| node_resultsview
node_careerhistory -->|"updates page"| node_resultsview
node_classification -->|"updates page"| node_resultsview

click node_page "https://github.com/justaa1/openuil/blob/main/index.html"
click node_app "https://github.com/justaa1/openuil/blob/main/app.js"
click node_criteria "https://github.com/justaa1/openuil/blob/main/app.js"
click node_resultlookup "https://github.com/justaa1/openuil/blob/main/app.js"
click node_individual "https://github.com/justaa1/openuil/blob/main/app.js"
click node_teams "https://github.com/justaa1/openuil/blob/main/app.js"
click node_science "https://github.com/justaa1/openuil/blob/main/app.js"
click node_comparison "https://github.com/justaa1/openuil/blob/main/app.js"
click node_personsearch "https://github.com/justaa1/openuil/blob/main/app.js"
click node_careerhistory "https://github.com/justaa1/openuil/blob/main/app.js"
click node_schoolsearch "https://github.com/justaa1/openuil/blob/main/app.js"
click node_schoolresults "https://github.com/justaa1/openuil/blob/main/app.js"
click node_classification "https://github.com/justaa1/openuil/blob/main/app.js"
click node_resultsview "https://github.com/justaa1/openuil/blob/main/app.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_page,node_app toneBlue
class node_criteria,node_resultdata,node_resultlookup toneAmber
class node_personsearch,node_searchindex,node_careerhistory,node_schoolsearch,node_schoolresults,node_classification toneMint
class node_individual,node_teams,node_science,node_comparison,node_resultsview toneRose
class node_visitor toneIndigo
```

## Components

### Web interface

- [Application page](https://github.com/justaa1/openuil/blob/main/index.html): `index.html`
- [Browser application](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`

### Competition results

- [Competition criteria](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- **Competition dataset**
- [Results lookup](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`

### People and schools

- [Student career search](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- **Search index**
- [Career history](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [School lookup](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [School year results](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [School classification](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`

### Results presentation

- [Individual rankings](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [Team rankings](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [Science subscores](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [Regional comparison](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`
- [Results views](https://github.com/justaa1/openuil/blob/main/app.js): `app.js`

### Other components

- **Visitor**

## Connections

- Visitor → Application page: uses
- Application page → Browser application: loads
- Browser application → Competition criteria: reads selections
- Competition criteria → Results lookup: submits query
- Results lookup → Competition dataset: fetches results
- Results lookup → Individual rankings: renders data
- Results lookup → Team rankings: renders data
- Individual rankings → Science subscores: adds subscores
- Individual rankings → Regional comparison: supports comparison
- Visitor → Student career search: searches student
- Student career search → Search index: loads index
- Student career search → Career history: shows history
- Visitor → School lookup: searches school
- School lookup → School year results: browses years
- Visitor → School classification: looks up classification
- Results lookup → Results views: updates page
- School year results → Results views: updates page
- Career history → Results views: updates page
- School classification → Results views: updates page
