An editorial Marian study library.
Fifteen hand-designed pages on Mary as Mediatrix and Co-Redemptrix.
Patristic. Medieval. Magisterial.
Live site · Build spec · Design system · Data pipeline
Mediatrix is a fifteen-page editorial archive of the Marian witness across twenty centuries, the patristic Fathers, the medieval Doctors, the modern Magisterium, gathered into a single quiet study library. Every claim is anchored. Every quotation is tagged for provenance: verbatim, traditional, disputed, liturgical, or magisterial. The site reads as a printed missal would: heavy with restraint, light with gold, ordered by feast.
The codebase is intentionally small. Static HTML, hand-written CSS,
vanilla JavaScript. No framework. No build step inside site/. Twenty-seven
self-hosted woff2 fonts, nothing fetched from a third-party CDN at
read-time. A Python data pipeline (tools/, stdlib only) regenerates the
structured JSON layer from a thirteen-file markdown corpus when the
sources change.
| Page | Vestment | What it carries |
|---|---|---|
index.html |
blue | Hero, today's feast, recent saints, resume reading |
library.html |
blue | Twelve eras of Marian witness, era by era |
ot-types.html |
blue | Twenty-eight Old Testament types of Our Lady |
nt-texts.html |
blue | Three load-bearing New Testament passages |
anthology.html |
blue | Fifty-seven saints, in their own words |
rosary.html |
white | Twenty mysteries, with scriptural and patristic glosses |
litany.html |
blue | The Litany of Loreto, fifty-four titles annotated |
office.html |
blue | Office of Readings: fifteen second-readings sourcebook |
akathist.html |
blue | The Akathist, twenty-four stanzas, Greek, English facing |
defense.html |
red | Twelve Protestant objections, twelve patristic replies |
feasts.html |
blue | The eighteen Marian feasts of the liturgical year |
apparitions.html |
blue | The seven principal Church-approved apparitions |
iconography.html |
blue | The four canonical Marian icon-types, with provenance |
search.html |
blue | Client-side fuzzy search across the whole corpus |
about.html |
blue | Methodology, provenance criteria, source notes |
- Editorial layer. Fifteen hand-designed HTML pages at
site/*.html. The visible site. Each page is per-section bespoke. No template engine, no shared layout file: every page is tuned by hand. - Data layer. Fourteen normalised JSON files at
site/data/*.json, generated by the Python pipeline intools/from the canonical thirteen-file markdown corpus at$MARIOLOGY_CORPUS/. Each file carriesschema_version,source_mtime,generated_at, and the structured records (saints, titles, types, mysteries, apparitions, feasts, ...). The HTML does not read the JSON at runtime , pages are hand-set against the markdown directly. The JSON exists for regeneration, cross-page validation, search-index rebuild, and any future template-driven hydration.
Editorial Catholic register. The palette is Marian: deep navy ink
(#0C2340), Marian blue accent (#1E3A6E), Notre Dame gold (#C99700),
mystical rose (#B66D87). Display in Cinzel, body in Source Serif
4, meta in Source Sans 3, numerics in JetBrains Mono. Six
vestment washes echo the liturgical year; the default is blue. Day mode
reads as paper under noon light; Vigil mode reads as gilt under tapers.
The only symbolic glyph is the Stella Maris, an eight-pointed gold star, appearing in the favicon, the index ornament, and the colophon rule. No decorative imagery. No emoji. No gradients used for decoration. No drop-shadow flourish.
Deep-history asides — the Marian Psalter's history, the Luminous
mysteries' Bartolo Longo backstory, the Litany of Loreto's papal
succession, the Sub Tuum's third-century papyrus, the Salve Regina's
Hermann of Reichenau, the Memorare's seventeenth-century Paris
parish, the Genesis 3:15 / Revelation 12 Marian bookends of Scripture —
live in seven popover-cards across four surfaces, each opened by
a small editorial chip near the relevant heading. The popover pattern
uses the native HTML popover API; no JS modal library; the cards
hide on paper.
make serve # start the local preview on :8000
make check # quick health (file counts, anchors, raw hex outside :root)
make stop # kill the local preview
make clean # remove tmp/ and pyc cruft
make build-data # regenerate site/data/*.json from the markdown corpus
make verify-data # verify all JSON outputs exist + record counts
make clean-data # rm site/data/*.json
make help # list every targetMediatrix/
├── site/ ← the live site. Open via `make serve`.
│ ├── *.html 15 hand-designed pages
│ ├── styles/ mediatrix.css (tokens + components) · fonts.css
│ ├── scripts/ mediatrix.js (mode, recents, resume)
│ ├── fonts/ 27 self-hosted woff2
│ ├── data/ 14 generated JSON files
│ ├── SPEC.md page-by-page acceptance contract
│ └── design.md token table · rhythm · type rules
├── tools/ ← data pipeline (markdown → JSON, stdlib only)
│ ├── build-mediatrix.py main script: 13 extractors + search-index builder
│ ├── lib/parser.py parsing primitives (frontmatter, sections, blockquotes)
│ ├── validate-references.py cross-page validator
│ └── README.md pipeline documentation
├── docs/ ← extended editorial notes
├── scripts/ ← repo-management helpers (GitHub setup, etc.)
├── .env.example ← copy to .env.local and set MARIOLOGY_CORPUS
├── Makefile
├── CITATION.cff
├── LICENSE ← CC BY-NC-SA 4.0 (content) + MIT (code)
└── README.md
- Tokens only in
styles/mediatrix.css :root. No raw hex elsewhere. <main id="main">on every page; skip-link present and visible on focus.- Italic Source Serif used only for Greek, Hebrew, and Latin.
- No
href="#". No emoji. No gradients for decoration. No drop-shadow. - No build step inside
site/. Static HTML, full stop. - Vestment via
[data-vestment]on<body>, never via class. - Numbers are specific (54 titles, 28 Old Testament types, 57 saints, 7 apparitions, 18 feasts, 20 mysteries, 7 popover-cards across four surfaces). Vagueness is a defect.
- Stella Maris is the only ornament admitted.
cp .env.example .env.local
# edit .env.local: set MARIOLOGY_CORPUS to your local markdown path
make serve # opens http://localhost:8000
make build-data # regenerate JSON layer (only if you have the corpus)If MARIOLOGY_CORPUS is unset and ./corpus/mariology/ does not exist,
the pipeline will exit early with a clear error. The HTML still renders
fine without the JSON regenerated, pages are hand-set against the
markdown directly.
If you reference Mediatrix in scholarship or homiletic preparation, see
CITATION.cff for the canonical citation form.
- Editorial content (prose, anthology, annotations), CC BY-NC-SA 4.0
- Source code (Python, CSS, JavaScript, Makefile), MIT
- Fonts, SIL Open Font License 1.1 (per the woff2 files)
- Quoted patristic / medieval / magisterial sources, retain their public-domain or original-publisher status; quoted under editorial / fair-use commentary.
See LICENSE for full terms.
Sub tuum praesidium confugimus, Sancta Dei Genitrix.