# The architecture of Kobold

These are the relevant types and how they are constructed from one another.
The flow of data corresponds to the flow of the available type transformations.

                            Layouts
                               |
                               |  Macros
                               \     \
PagePath -> KoboldPage  ------------------>  HTMLPage
             - path (relative to /)           - path (relative to /)
             - front_matter                   - content
             - body

The `front_matter` is a struct with data members `layout` (the page layout to use), `tags` (a list of tags for the
page) and `metadata` (key-value pairs of other metadata that can be used in the page text).

Kobold internals are implemented as much as possible as pure functions that perform type transformations.
The goal is to achieve parallelization simply by parallelizing a chain of iterator transformations.
