Theme Browser & Quality System

Explore, filter, and evaluate the theme catalog before building.

Overview

The Theme Browser at /themes displays all available themes with synergy data, editorial quality scores, and pool size information. Use it to discover themes, understand what cards a theme covers, and filter by quality before selecting themes for a build.

Enable the theme selector and browser with ENABLE_THEMES=1 (default: on).


Badge System

Each theme card in the browser displays up to three badge types:

Quality Badge (SHOW_THEME_QUALITY_BADGES=1)

Automatically computed score based on four factors, normalized to 0–100:

Factor Max points What it measures
Card synergy quality 30 EDHREC rank and synergy data richness for the theme's example cards
Uniqueness ratio 40 Fraction of theme cards that appear in fewer than 25% of all themes
Description quality 20 Manual editorial description (10 pts), auto-generated rule (5 pts), generic (0 pts)
Curation bonus 10 Theme has hand-curated synergy data
Badge Score threshold Meaning
Excellent ≥ 75 / 100 Strong synergy, distinctive card pool, well-curated
Good 60–74 Solid theme with reasonable card support
Fair 40–59 Usable but limited pool or marginal synergy
Poor < 40 Sparse pool or weak theme coherence

Pool Size Badge (SHOW_THEME_POOL_BADGES=1)

Number of on-theme cards available in the catalog.

Badge Approximate range
Vast 200+ cards
Large 100–199 cards
Moderate 50–99 cards
Small 20–49 cards
Tiny Under 20 cards

Pool size is affected by THEME_MIN_CARDS: themes with fewer cards than this threshold are stripped from the catalog entirely during setup/tagging (default: 5).

Popularity Badge (SHOW_THEME_POPULARITY_BADGES=1)

How frequently the theme appears across builds in the system. Higher popularity themes have more real-world data behind their synergy rankings.


Filtering

Filter chips appear above the theme grid when SHOW_THEME_FILTERS=1 (default: on). You can combine filters:

  • Filter by Quality: Excellent, Good, Fair, Poor (multi-select)
  • Filter by Pool Size: Vast, Large, Moderate, Small, Tiny (multi-select)
  • Filter by Popularity

Multiple active filters use AND logic — a theme must match all active badge filters to appear.


Theme Detail Pages

Click any theme card to open its detail page. Each page shows:

  • The full on-theme card list with EDHREC rank, CMC, and synergy score
  • Badge explanations for that theme
  • Related themes (by tag overlap)

Quality Dashboard

/diagnostics/quality (requires SHOW_DIAGNOSTICS=1) provides a catalog-level health overview:

  • Distribution of themes by quality tier
  • Average pool size per quality tier
  • Themes flagged for editorial review (e.g., very low card count, no quality score)

Environment Variables

Variable Default Purpose
ENABLE_THEMES 1 Keep the theme browser and theme selector active.
SHOW_THEME_QUALITY_BADGES 1 Show quality badges in the theme catalog.
SHOW_THEME_POOL_BADGES 1 Show pool size badges in the theme catalog.
SHOW_THEME_POPULARITY_BADGES 1 Show popularity badges in the theme catalog.
SHOW_THEME_FILTERS 1 Show filter chips in the theme catalog.
THEME_MIN_CARDS 5 Minimum cards required for a theme to appear in the catalog.
WEB_THEME_PICKER_DIAGNOSTICS 1 Unlock /themes/metrics, uncapped synergies, and extra metadata.
THEME_MATCH_MODE permissive Fuzzy match mode for supplemental themes: permissive continues on unresolved themes, strict stops the build.

Rebuilding the Theme Catalog

If you update card data or theme YAML files, rebuild the merged catalog:

# Docker Compose:
docker compose run --rm --entrypoint bash web -lc "python -m code.scripts.build_theme_catalog"

# Local:
python -m code.scripts.build_theme_catalog

See Also

  • Build Wizard — how themes are selected and used during the build workflow
  • Random Build — use themes as constraints for randomized commander selection
  • Partner Mechanics — finding themes that work across both commanders' color identity