A searchable companion wiki for players in the Mythic Odysseys of Theros campaign. Built with Obsidian as the editing interface and Quartz 4.0 to publish it as a static site with wikilinks, backlinks, full-text search, and a graph view — all styled to look like an actual D&D sourcebook.
Theming
The visual design is sourced directly from Homebrewery (NaturalCrit’s open-source D&D document creator). Fonts, the parchment color palette, and the background image were all pulled from the Homebrewery GitHub repo and adapted for Quartz’s SCSS theming system.
- Fonts: BookInsanityRemake (body), MrEavesRemake (headers), ScalySansRemake (code/tables), plus authentic D&D script fonts: Davek, Iokharic, and Rellanic
- Light mode: parchment background (
#eee5ce) with dark red accents (#58180D) - Dark mode: dark texture background with muted teal and sage tones
- A 211-line
custom.scsshandles background images, font face definitions, and full typography overrides — h1 scales to 3rem, h2 to 2.5rem, matching the proportions of a printed sourcebook
Custom Quartz Plugins
Three custom plugins extend Quartz 4.0 beyond its defaults:
FantasyStatblocks is an 887-line TypeScript transformer that parses statblock YAML code blocks embedded in markdown, resolves wiki-links ([[Monster Name]]) to real site URLs at build time, and emits client-side rendering code that produces fully styled D&D stat blocks with 60+ configurable CSS variables. It’s designed to produce the same output as the Obsidian Fantasy Statblocks plugin, so stat blocks look identical in the editor and the published site.
FolderNoteExplorer extends Quartz’s built-in sidebar explorer so that clicking a folder name navigates to that folder’s index note (e.g., Spells/Spells.md) rather than just expanding/collapsing the tree. A secondary icon links to the folder’s listing page. The folder note itself is hidden from the child list to avoid appearing twice.
SpellTable renders a filterable table of all spells in the compendium with live client-side search and filter controls for level, school, class, race, feat, and feature source.
Official Content Pipeline
The bulk of the wiki’s content is a D&D 5e compendium generated from 5eTools JSON data using ttrpg-convert-cli. This produced 3,841 markdown files covering monsters, spells, items, backgrounds, classes, races, feats, and more — all with consistent frontmatter and cross-links that Quartz resolves into a navigable graph.
Obsidian is used as the editing interface with a suite of community plugins:
| Plugin | Purpose |
|---|---|
| Fantasy Statblocks | In-editor stat block rendering and editing |
| Dataview | Query-based dynamic tables for spells, monsters, items |
| Initiative Tracker | Combat encounter management with HP/AC tracking |
| Leaflet | Interactive maps for world locations |
| Calendarium | Campaign calendar and session timeline |
| Templater | Consistent note templates across all content types |
| Admonition | Styled callout blocks (tip, warning, lore, etc.) |
| DB Folder | Spreadsheet-like view for browsing content databases |
| Folder Notes | Index notes that open when a folder is clicked |
MTG Card Art Pipeline
Theros is a Magic: The Gathering plane, so nearly every creature, spell, and location in the campaign has a corresponding MTG card. I wrote Python scripts to collect full-resolution, uncropped card art for all Theros-plane cards across multiple sets.
The MTG Multiverse Project was used to enumerate all Theros cards that appear in non-Theros sets (Commander precons, Dominaria, etc.). From there, art was pulled from two sources:
- Scryfall API — primary source for card metadata and image links
- The Art of MTG + mtgpics.com — scraped for full-resolution, unframed art that Scryfall doesn’t provide
The result is a library of high-res art that is used throughout the wiki to illustrate monster entries, magic items, and location pages.
Homebrew Content
Gray Merchant of Asphodel
The Gray Merchant of Asphodel (by Grady Wang / Gallant Goblin) is a DMs Guild PDF containing 100 custom Theros-themed magic items and the Gray Merchant as an encounterable NPC merchant. Since the content existed only as a PDF, I used OCR to extract and reformat it into markdown matching the ttrpg-convert-cli compendium structure.
Most items are named after and directly inspired by MTG cards from Theros, so I applied fuzzy name matching between item names and the scraped card art collection to automatically assign thematically appropriate illustrations to each entry.
Theros Bestiary
The Theros Bestiary (by Rob Schnautz / “schnautzr”) covers custom Theros monsters not included in the official sourcebook. The author also published all of these creatures on CritterDB in a machine-readable format, so I was able to download the bestiaries as JSON and convert them to markdown matching the compendium’s statblock format — no OCR required. Art was again assigned via name matching against the MTG card art collection.
Tasks
- Populate campaign-specific content (session notes, NPCs, locations) medium
- Add Leaflet interactive maps for locations medium
- Deploy Quartz 4.0 and configure GitHub Pages high
- Apply Homebrewery parchment theme (fonts, colors, background) high
- Build custom FantasyStatblocks Quartz transformer plugin high
- Import D&D compendium via ttrpg-convert-cli (3,841 files) high
- Write Python pipeline to scrape full-res MTG card art high
- Import Gray Merchant of Asphodel homebrew items via OCR high
- Import Theros Bestiary homebrew monsters from CritterDB JSON high
- Automated art matching between item/monster names and MTG cards high
- Create FolderNoteExplorer custom Quartz component medium
- Build SpellTable component with live filtering medium
- Set up Obsidian vault with community plugins medium
Milestones
- Site deployed to GitHub Pages
- D&D compendium imported and cross-linked
- Custom Homebrewery theming applied
- FantasyStatblocks plugin rendering stat blocks
- MTG card art pipeline complete
- Homebrew content (items + monsters) integrated
- Campaign content fully populated