# hirotomasato/yowes architecture

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

## Overview

Yowes is a teacher-document generator whose primary workflow is an MCP client discovering country and school options, then requesting country-specific documents from teacher and school details; the server returns paths to rendered PNGs. Country modules combine local school data and document rendering, while shared utilities provide fonts and consistent profile photos. The README also documents a legacy GUI sharing the generation logic. The MCP and GUI implementation excerpts were not provided, so their internal call wiring is shown only where the documented workflow supports it.

Main entry points: [`countries/utils.py`](https://github.com/hirotomasato/yowes/blob/main/countries/utils.py) (Rendering utilities), [`countries/base.py`](https://github.com/hirotomasato/yowes/blob/main/countries/base.py) (Generator base), [`mcp_server.py`](https://github.com/hirotomasato/yowes/blob/main/mcp_server.py) (MCP server), [`countries/uk/__init__.py`](https://github.com/hirotomasato/yowes/blob/main/countries/uk/__init__.py) (UK generator)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_interfaces["User interfaces"]
  node_mcp["MCP server<br/>[mcp_server.py]"]
  node_gui["Legacy GUI<br/>[main_gui.py]"]
end

subgraph group_generation["Generation core"]
  node_base["Generator base<br/>[base.py]"]
  node_utils["Rendering utilities<br/>[utils.py]"]
end

subgraph group_country["Country generators"]
  node_uk["UK generator<br/>[__init__.py]"]
  node_us["US generator<br/>[__init__.py]"]
  node_france["France generator<br/>[__init__.py]"]
  node_netherlands["Netherlands generator<br/>[__init__.py]"]
  node_indonesia["Indonesia generator<br/>[__init__.py]"]
  node_australia["Australia generator<br/>[__init__.py]"]
  node_canada["Canada generator<br/>[__init__.py]"]
  node_spain["Spain generator<br/>[__init__.py]"]
  node_argentina["Argentina generator<br/>[__init__.py]"]
  node_slovakia["Slovakia generator<br/>[__init__.py]"]
  node_mexico["Mexico generator<br/>[__init__.py]"]
  node_philippines["Philippines generator<br/>[__init__.py]"]
  node_thailand["Thailand generator<br/>[__init__.py]"]
end

subgraph group_assets["Bundled assets"]
  node_photos["Profile photos"]
  node_fonts["Bundled fonts"]
end

node_client(("MCP client"))
node_output["PNG files"]

node_client -->|"sends MCP requests"| node_mcp
node_mcp -->|"uses generators"| node_base
node_mcp -->|"writes PNGs"| node_output
node_gui -->|"shares generation logic"| node_base
node_uk -->|"extends"| node_base
node_us -->|"extends"| node_base
node_france -->|"extends"| node_base
node_netherlands -->|"extends"| node_base
node_indonesia -->|"extends"| node_base
node_australia -->|"extends"| node_base
node_canada -->|"extends"| node_base
node_spain -->|"extends"| node_base
node_argentina -->|"extends"| node_base
node_slovakia -->|"extends"| node_base
node_mexico -->|"extends"| node_base
node_philippines -->|"extends"| node_base
node_thailand -->|"extends"| node_base
node_uk -->|"uses rendering helpers"| node_utils
node_us -->|"uses rendering helpers"| node_utils
node_france -->|"uses rendering helpers"| node_utils
node_netherlands -->|"uses rendering helpers"| node_utils
node_indonesia -->|"uses rendering helpers"| node_utils
node_australia -->|"uses rendering helpers"| node_utils
node_canada -->|"uses rendering helpers"| node_utils
node_spain -->|"uses rendering helpers"| node_utils
node_argentina -->|"uses rendering helpers"| node_utils
node_slovakia -->|"uses rendering helpers"| node_utils
node_mexico -->|"uses rendering helpers"| node_utils
node_philippines -->|"uses rendering helpers"| node_utils
node_thailand -->|"uses rendering helpers"| node_utils
node_utils -->|"selects consistently"| node_photos
node_utils -->|"loads"| node_fonts

click node_mcp "https://github.com/hirotomasato/yowes/blob/main/mcp_server.py"
click node_gui "https://github.com/hirotomasato/yowes/blob/main/main_gui.py"
click node_base "https://github.com/hirotomasato/yowes/blob/main/countries/base.py"
click node_utils "https://github.com/hirotomasato/yowes/blob/main/countries/utils.py"
click node_uk "https://github.com/hirotomasato/yowes/blob/main/countries/uk/__init__.py"
click node_us "https://github.com/hirotomasato/yowes/blob/main/countries/us/__init__.py"
click node_france "https://github.com/hirotomasato/yowes/blob/main/countries/france/__init__.py"
click node_netherlands "https://github.com/hirotomasato/yowes/blob/main/countries/netherlands/__init__.py"
click node_indonesia "https://github.com/hirotomasato/yowes/blob/main/countries/indonesia/__init__.py"
click node_australia "https://github.com/hirotomasato/yowes/blob/main/countries/australia/__init__.py"
click node_canada "https://github.com/hirotomasato/yowes/blob/main/countries/canada/__init__.py"
click node_spain "https://github.com/hirotomasato/yowes/blob/main/countries/spain/__init__.py"
click node_argentina "https://github.com/hirotomasato/yowes/blob/main/countries/argentina/__init__.py"
click node_slovakia "https://github.com/hirotomasato/yowes/blob/main/countries/slovakia/__init__.py"
click node_mexico "https://github.com/hirotomasato/yowes/blob/main/countries/mexico/__init__.py"
click node_philippines "https://github.com/hirotomasato/yowes/blob/main/countries/philippines/__init__.py"
click node_thailand "https://github.com/hirotomasato/yowes/blob/main/countries/thailand/__init__.py"
click node_photos "https://github.com/hirotomasato/yowes/tree/main/countries/foto"
click node_fonts "https://github.com/hirotomasato/yowes/tree/main/countries/fonts"

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_mcp,node_gui,node_client toneBlue
class node_base,node_utils toneAmber
class node_uk,node_us,node_france,node_netherlands,node_indonesia,node_australia,node_canada,node_spain,node_argentina,node_slovakia,node_mexico,node_philippines,node_thailand toneMint
class node_photos,node_fonts toneRose
class node_output toneIndigo
```

## Components

### User interfaces

- [MCP server](https://github.com/hirotomasato/yowes/blob/main/mcp_server.py): `mcp_server.py`
- [Legacy GUI](https://github.com/hirotomasato/yowes/blob/main/main_gui.py): `main_gui.py`

### Generation core

- [Generator base](https://github.com/hirotomasato/yowes/blob/main/countries/base.py): `countries/base.py`
- [Rendering utilities](https://github.com/hirotomasato/yowes/blob/main/countries/utils.py): `countries/utils.py`

### Country generators

- [UK generator](https://github.com/hirotomasato/yowes/blob/main/countries/uk/__init__.py): `countries/uk/__init__.py`
- [US generator](https://github.com/hirotomasato/yowes/blob/main/countries/us/__init__.py): `countries/us/__init__.py`
- [France generator](https://github.com/hirotomasato/yowes/blob/main/countries/france/__init__.py): `countries/france/__init__.py`
- [Netherlands generator](https://github.com/hirotomasato/yowes/blob/main/countries/netherlands/__init__.py): `countries/netherlands/__init__.py`
- [Indonesia generator](https://github.com/hirotomasato/yowes/blob/main/countries/indonesia/__init__.py): `countries/indonesia/__init__.py`
- [Australia generator](https://github.com/hirotomasato/yowes/blob/main/countries/australia/__init__.py): `countries/australia/__init__.py`
- [Canada generator](https://github.com/hirotomasato/yowes/blob/main/countries/canada/__init__.py): `countries/canada/__init__.py`
- [Spain generator](https://github.com/hirotomasato/yowes/blob/main/countries/spain/__init__.py): `countries/spain/__init__.py`
- [Argentina generator](https://github.com/hirotomasato/yowes/blob/main/countries/argentina/__init__.py): `countries/argentina/__init__.py`
- [Slovakia generator](https://github.com/hirotomasato/yowes/blob/main/countries/slovakia/__init__.py): `countries/slovakia/__init__.py`
- [Mexico generator](https://github.com/hirotomasato/yowes/blob/main/countries/mexico/__init__.py): `countries/mexico/__init__.py`
- [Philippines generator](https://github.com/hirotomasato/yowes/blob/main/countries/philippines/__init__.py): `countries/philippines/__init__.py`
- [Thailand generator](https://github.com/hirotomasato/yowes/blob/main/countries/thailand/__init__.py): `countries/thailand/__init__.py`

### Bundled assets

- [Profile photos](https://github.com/hirotomasato/yowes/tree/main/countries/foto): `countries/foto`
- [Bundled fonts](https://github.com/hirotomasato/yowes/tree/main/countries/fonts): `countries/fonts`

### Other components

- **MCP client**
- **PNG files**

## Connections

- MCP client → MCP server: sends MCP requests
- MCP server → Generator base: uses generators
- MCP server → PNG files: writes PNGs
- Legacy GUI → Generator base: shares generation logic
- UK generator → Generator base: extends
- US generator → Generator base: extends
- France generator → Generator base: extends
- Netherlands generator → Generator base: extends
- Indonesia generator → Generator base: extends
- Australia generator → Generator base: extends
- Canada generator → Generator base: extends
- Spain generator → Generator base: extends
- Argentina generator → Generator base: extends
- Slovakia generator → Generator base: extends
- Mexico generator → Generator base: extends
- Philippines generator → Generator base: extends
- Thailand generator → Generator base: extends
- UK generator → Rendering utilities: uses rendering helpers
- US generator → Rendering utilities: uses rendering helpers
- France generator → Rendering utilities: uses rendering helpers
- Netherlands generator → Rendering utilities: uses rendering helpers
- Indonesia generator → Rendering utilities: uses rendering helpers
- Australia generator → Rendering utilities: uses rendering helpers
- Canada generator → Rendering utilities: uses rendering helpers
- Spain generator → Rendering utilities: uses rendering helpers
- Argentina generator → Rendering utilities: uses rendering helpers
- Slovakia generator → Rendering utilities: uses rendering helpers
- Mexico generator → Rendering utilities: uses rendering helpers
- Philippines generator → Rendering utilities: uses rendering helpers
- Thailand generator → Rendering utilities: uses rendering helpers
- Rendering utilities → Profile photos: selects consistently
- Rendering utilities → Bundled fonts: loads
