Active Started

Theros D&D Player Wiki

85%
WebD&DTTRPGPython Quartz 4.0ObsidianTypeScriptPythonGitHub PagesSCSSttrpg-convert-cli

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.scss handles 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:

PluginPurpose
Fantasy StatblocksIn-editor stat block rendering and editing
DataviewQuery-based dynamic tables for spells, monsters, items
Initiative TrackerCombat encounter management with HP/AC tracking
LeafletInteractive maps for world locations
CalendariumCampaign calendar and session timeline
TemplaterConsistent note templates across all content types
AdmonitionStyled callout blocks (tip, warning, lore, etc.)
DB FolderSpreadsheet-like view for browsing content databases
Folder NotesIndex 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:

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

  1. Site deployed to GitHub Pages
  2. D&D compendium imported and cross-linked
  3. Custom Homebrewery theming applied
  4. FantasyStatblocks plugin rendering stat blocks
  5. MTG card art pipeline complete
  6. Homebrew content (items + monsters) integrated
  7. Campaign content fully populated