# mnprt-here/eldamo-assistant architecture

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

- Interactive diagram: https://gitdiagram.com/mnprt-here/eldamo-assistant
- Repository: https://github.com/mnprt-here/eldamo-assistant

## Overview

Eldamo Assistant is a client-side language-learning revision and test board. Learners search vocabulary, browse course sections, generate customizable quizzes, or play Wordle; the browser UI delegates retrieval to the query engine and quiz generation to the quiz engine, then renders results or answers. Static JSON supplies Quenya words and sentences, with additional language word databases supporting search and games. A Python CLI offers parallel search, revision, and quiz workflows. The JavaScript excerpts are partial, so some UI-to-engine wiring is based on the documented feature flow; only evidenced links are shown.

Main entry points: [`app.js`](https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js) (Browser query engine), [`query_engine.py`](https://github.com/mnprt-here/eldamo-assistant/blob/main/query_engine.py) (Python query engine), [`cli.py`](https://github.com/mnprt-here/eldamo-assistant/blob/main/cli.py) (Terminal workflows), [`index.html`](https://github.com/mnprt-here/eldamo-assistant/blob/main/index.html) (SPA interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_web["Web application"]
  node_page["SPA interface<br/>[index.html]"]
  node_webapp["UI workflows<br/>[app.js]"]
end

subgraph group_engines["Learning engines"]
  node_webquery["Browser query engine<br/>[app.js]"]
  node_webquiz["Browser quiz engine<br/>[app.js]"]
  node_wordle["Wordle game<br/>[app.js]"]
  node_pyquery["Python query engine<br/>[query_engine.py]"]
  node_pyquiz["Python quiz engine<br/>[quiz_engine.py]"]
end

subgraph group_content["Study content"]
  node_words[("Quenya words")]
  node_sentences[("Quenya sentences")]
  node_nqwords[("Neo-Quenya index<br/>[words-nq.json]")]
  node_nswords[("Neo-Sindarin index<br/>[words-ns.json]")]
end

subgraph group_cli["CLI application"]
  node_cli["Terminal workflows<br/>[cli.py]"]
end

node_learner(("Learner"))
node_terminal(("CLI user"))

node_learner -->|"opens"| node_page
node_page -->|"hosts"| node_webapp
node_webapp -->|"searches and retrieves"| node_webquery
node_webapp -->|"configures and generates"| node_webquiz
node_webapp -->|"starts game"| node_wordle
node_webquery -->|"reads"| node_nqwords
node_webquery -->|"reads"| node_nswords
node_webquiz -->|"retrieves sections"| node_webquery
node_wordle -->|"uses word index"| node_webquery
node_terminal -->|"uses"| node_cli
node_cli -->|"searches and revises"| node_pyquery
node_cli -->|"generates quizzes"| node_pyquiz
node_pyquiz -->|"retrieves sections"| node_pyquery
node_pyquery -->|"loads"| node_words
node_pyquery -->|"loads"| node_sentences

click node_page "https://github.com/mnprt-here/eldamo-assistant/blob/main/index.html"
click node_webapp "https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js"
click node_webquery "https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js"
click node_webquiz "https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js"
click node_wordle "https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js"
click node_pyquery "https://github.com/mnprt-here/eldamo-assistant/blob/main/query_engine.py"
click node_pyquiz "https://github.com/mnprt-here/eldamo-assistant/blob/main/quiz_engine.py"
click node_words "https://github.com/mnprt-here/eldamo-assistant/blob/main/database/quenya-english-words.json"
click node_sentences "https://github.com/mnprt-here/eldamo-assistant/blob/main/database/quenya-english-exercise-sentences.json"
click node_nqwords "https://github.com/mnprt-here/eldamo-assistant/blob/main/database/words-nq.json"
click node_nswords "https://github.com/mnprt-here/eldamo-assistant/blob/main/database/words-ns.json"
click node_cli "https://github.com/mnprt-here/eldamo-assistant/blob/main/cli.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_page,node_webapp,node_terminal toneBlue
class node_webquery,node_webquiz,node_wordle,node_pyquery,node_pyquiz toneAmber
class node_words,node_sentences,node_nqwords,node_nswords toneMint
class node_cli toneRose
class node_learner toneIndigo
```

## Components

### Web application

- [SPA interface](https://github.com/mnprt-here/eldamo-assistant/blob/main/index.html): `index.html`
- [UI workflows](https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js): `app.js`

### Learning engines

- [Browser query engine](https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js): `app.js`
- [Browser quiz engine](https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js): `app.js`
- [Wordle game](https://github.com/mnprt-here/eldamo-assistant/blob/main/app.js): `app.js`
- [Python query engine](https://github.com/mnprt-here/eldamo-assistant/blob/main/query_engine.py): `query_engine.py`
- [Python quiz engine](https://github.com/mnprt-here/eldamo-assistant/blob/main/quiz_engine.py): `quiz_engine.py`

### Study content

- [Quenya words](https://github.com/mnprt-here/eldamo-assistant/blob/main/database/quenya-english-words.json): `database/quenya-english-words.json`
- [Quenya sentences](https://github.com/mnprt-here/eldamo-assistant/blob/main/database/quenya-english-exercise-sentences.json): `database/quenya-english-exercise-sentences.json`
- [Neo-Quenya index](https://github.com/mnprt-here/eldamo-assistant/blob/main/database/words-nq.json): `database/words-nq.json`
- [Neo-Sindarin index](https://github.com/mnprt-here/eldamo-assistant/blob/main/database/words-ns.json): `database/words-ns.json`

### CLI application

- [Terminal workflows](https://github.com/mnprt-here/eldamo-assistant/blob/main/cli.py): `cli.py`

### Other components

- **Learner**
- **CLI user**

## Connections

- Learner → SPA interface: opens
- SPA interface → UI workflows: hosts
- UI workflows → Browser query engine: searches and retrieves
- UI workflows → Browser quiz engine: configures and generates
- UI workflows → Wordle game: starts game
- Browser query engine → Neo-Quenya index: reads
- Browser query engine → Neo-Sindarin index: reads
- Browser quiz engine → Browser query engine: retrieves sections
- Wordle game → Browser query engine: uses word index
- CLI user → Terminal workflows: uses
- Terminal workflows → Python query engine: searches and revises
- Terminal workflows → Python quiz engine: generates quizzes
- Python quiz engine → Python query engine: retrieves sections
- Python query engine → Quenya words: loads
- Python query engine → Quenya sentences: loads
