Jason Flatford Fractional CTO
Book 15 minutes (opens Google Calendar in a new tab)

Content SaaS

Mythic Decks

A new Arena Brawl deck every day, ready to play. A fully automated pipeline - GitHub Actions plus Anthropic agents - generates, validates, and publishes a fresh decklist daily, grounded in Moxfield references and Scryfall card data so nothing hallucinated ever reaches the site.

  • Next.js 16 + Tailwind v4 + shadcn/ui
  • Anthropic Agent Pipeline
  • Public REST API + OpenAPI
  • Bluesky + Mastodon federated publishing

Overview

Mythic Decks is a focused content site that does one thing exceptionally well: give Magic: The Gathering Arena Brawl players a ready-to-import deck every morning. No accounts, no sign-ups, no AI branding - just a fresh, well-built decklist waiting on the homepage.

  • Daily publishing, zero manual work: a cron-driven pipeline selects a commander, gathers community references, builds a deck, validates it, and publishes - every day
  • Grounded generation: Moxfield decklists plus occurrence rankings from the oracle CLI keep the agent anchored to real community play, not guesses
  • Full validation: every card is checked against Scryfall for existence, Brawl legality, color identity, and singleton rules before anything is published
  • One-click Arena import: the deck is pre-formatted so players copy, paste into Arena, and queue up in seconds

Problem

Brawl is one of MTG Arena's most popular formats, but finding a good decklist for it is a fragmented, low-quality experience.

Scattered content

  • Decks live in Reddit threads, old blog posts, random Moxfield searches
  • No single daily source for fresh Brawl content
  • Aggregator sites treat Brawl as an afterthought

Quality vs. scale

  • Hand-curated decks don't scale to a daily cadence
  • Naive AI generation hallucinates cards or breaks format rules
  • Readers need trust that every card is real and legal

Friction at the finish line

  • Even when a deck is found, copying it to Arena is fiddly
  • Players want to queue up, not transcribe cards
  • Mobile clipboard flow must just work

Solution

A minimal site with a single hero surface (today's deck) backed by an autonomous publishing pipeline that treats Scryfall and the Anthropic API as the two sources of truth.

Core design decisions

  1. One deck per day, always fresh: a UTC daily cadence with round-robin color rotation so players never see three Simic decks in a row
  2. Agent grounded in real play: ~10 Moxfield reference decks plus occurrence rankings feed the agent so it synthesizes a consensus build, not a speculative one
  3. Validation is non-negotiable: every card must pass Scryfall existence, format legality, color identity, and singleton checks before publication
  4. Content over chrome: no accounts, no AI branding, no bloat - the page is a decklist, a deck guide, and a copy button

Generation pipeline

A seven-step GitHub Actions workflow runs daily at 06:00 UTC. Each stage has a clear input, output, and failure mode - the pipeline either publishes a validated deck or leaves yesterday's in place and logs the failure.

StageWhat happens
1 - Commander selectionPull the next commander from the queue with color rotation and no recent repeats; verify the commander is still Brawl-legal
2 - Reference gatheringFetch ~10 Moxfield decklists for the commander; fall back to pre-ingested data or occurrence rankings if Moxfield is blocked
3 - Theme selectionIdentify viable archetypes (Tokens, Voltron, Aristocrats, Spellslinger, Landfall…) and pick the strongest for this commander
4 - Decklist generationAnthropic agent receives the commander, theme, references, and occurrence data; builds a 100-card singleton list
5 - ValidationEvery card verified against Scryfall for existence, legality, color identity, singleton; up to three correction rounds if checks fail
6 - Deck guideAgent writes the pitch, play summary, key synergies, and opening-hand guidance; guide card references are cross-checked against the decklist
7 - PublicationWrite decklist, guide, Moxfield refs, and metadata to Postgres; trigger Next.js revalidation so the homepage flips

Commander rotation

  • Launch seed: ~15 hand-picked commanders with strong reference availability for day-one quality
  • Ongoing rotation: randomized round-robin through color combinations, then a random commander within each slot
  • No repeats until the pool is exhausted; deprioritize commanders with zero references

Failure handling

  • Up to three correction rounds if validation fails - the agent is re-prompted with the specific failures
  • After three failures, skip the commander and log for manual review
  • If the run fails entirely, yesterday's deck stays featured - never a blank homepage

Validation & quality

The agent is not trusted to produce correct decklists on its own. Every card passes a deterministic validation layer before anything reaches the database, and the generated guide is cross-checked against the final decklist.

CheckFailure action
Card existenceScryfall lookup - reject unknown names, request replacement
Brawl legalityReject banned/unreleased cards, request replacement
Color identityReject cards outside commander's identity
Singleton ruleReject duplicate non-basic cards
Deck size (100)Re-run generation if short or over
Minimum land count (34)Re-prompt to add lands
Minimum interaction (5)Re-prompt to add removal/counterspells
Guide card referencesEvery card named in the guide must be in the decklist and exist on Scryfall

Architecture

A clean split between the publishing pipeline and the reader-facing site. The pipeline runs in GitHub Actions and writes to Neon Postgres; the Next.js app reads from Postgres via Drizzle and renders server components on Vercel.

Stack choices

  • Next.js 16 App Router: SSR for SEO, server components for direct database reads, ISR for efficient rebuilds
  • Drizzle + Neon Postgres: type-safe schema and queries, serverless Postgres with a generous free tier
  • Tailwind v4 + shadcn/ui: dark-first UI with OKLch tokens, consistent with sister projects
  • Vercel hosting: zero-config Next.js, edge network, preview deploys for every PR

Data model highlights

  • Commanders, decklists, decklist cards split so cards are queryable across every published deck ("show me every deck running Arcane Signet")
  • Postgres tsvector with weighted title/theme/guide fields powers full-text search
  • Commander queue table tracks scheduled dates and failure reasons for operational visibility

Platform & public API

Mythic Decks has grown beyond a single daily site into a small platform: a public REST API powers other tools, federated cross-posting distributes each day's deck across the open social web, and a Resend-backed email newsletter keeps subscribers in the loop.

Public Toolkit API

  • REST/JSON over HTTPS at api.mythicdecks.net - cards, commanders, decks, sealed pool, served from the same Postgres that powers the site
  • OpenAPI 3 spec rendered with Scalar at /docs for an interactive reference
  • Upstash Redis rate limiting protects the public surface from runaway callers
  • First consumer: the sister mtg-deckbuilder CLI; designed for Wave 2 public launch and Wave 3+ MCP distribution

Distribution

  • Bluesky via the AT Protocol - each new deck cross-posted with commander art and a deep link
  • Mastodon via masto - federated reach for the same payload
  • Email newsletter through Resend with subscribe/unsubscribe flows and DKIM-aligned delivery
  • RSS + Open Graph rich previews keep organic distribution working on every channel

Data autonomy

  • Scryfall bulk fetcher keeps the oracle copy current; oracle JSON powers offline validation with zero per-call cost
  • EDHrec ingestion feeds card popularity rankings into theme selection and the "hidden gems" tagger
  • 17lands pool fetcher feeds the sealed deckbuilder with limited-format rating data
  • LLM tagger & dossier synthesizer run incrementally over new cards and commanders so the taxonomy stays fresh

Product surface

The site is deliberately small - a hero surface, a searchable archive, and a handful of polish affordances that turn a decklist into a frictionless "copy and queue up" moment.

Today's deck

  • Commander art hero with color pips and mana value
  • Deck guide: pitch, play summary, synergies, opening hand
  • Decklist grouped by card type with mana curve
  • One-click Arena import + copy-link share

Archive & cards

  • Full-text search across commanders, cards, guides
  • Card browser with hover previews and Scryfall deep links
  • Filters by color identity, date, and tags
  • Commander permalinks for every featured deck

Sealed builder

  • Build optimal sealed pools from set inputs
  • Backed by 17lands ratings and limited-format heuristics
  • Lives at /sealed-builder alongside the Brawl content

Public API + docs

  • REST endpoints: cards, commanders, decks, sealed pool
  • Scalar-rendered OpenAPI reference at /docs
  • Rate-limited via Upstash Redis

Newsletter

  • Subscribe / unsubscribe flows with Resend delivery
  • One email per featured deck, opt-out honored everywhere
  • Companion to the daily Bluesky + Mastodon posts

Polish

  • Card hover previews on every card name
  • RSS/Atom feed for new decklists
  • Open Graph art so shared links render rich previews
  • Internal design system page for token QA

Outcomes

1
Fresh deck published every day, autonomously
0
Hallucinated cards reach the site
3
Distribution channels per deck: web, Bluesky, Mastodon, email
5
Public API resources: cards, commanders, decks, sealed pool, OpenAPI
0
Manual curation required post-launch

Delivered capabilities

  • Autonomous daily publishing on GitHub Actions cron
  • Anthropic agent grounded in Moxfield refs, EDHrec popularity, and occurrence data
  • Deterministic validation against Scryfall for every card
  • Guide cross-validation against the decklist and Scryfall
  • Sealed/limited deckbuilder backed by 17lands ratings
  • LLM card tagger and commander dossier synthesizer running incrementally
  • Public REST API with Scalar-rendered OpenAPI reference
  • Upstash Redis rate limiting on the public surface
  • Federated cross-posting to Bluesky and Mastodon
  • Resend-backed email newsletter with subscribe/unsubscribe flows
  • One-click Arena import, full-text search, RSS, rich Open Graph
  • Design-system page for dark-theme token QA

Shipping AI-powered content products?

Mythic Decks shows what it takes to publish trustworthy AI-generated content every day - agents plus deterministic validation, minimal surface area, and an opinionated stack. If you're building something similar, let's talk.

Return to top

Press Esc to close • ⌘K / Ctrl K to open