Now shipping 1.4.0

Walk into your next card show with a plan, not a hope.

mgz-pkmn turns a list of cards you want into a printable binder with thumbnails, market prices, and your negotiation floor. Built for collectors who'd rather show up informed than wing it on convention center Wi-Fi.

Everything you need at the table.

One pipeline, three open data sources, every output format that's useful for prepping a card show.

  • Multi-source pricing

    Layered lookup across pokemontcg.io (TCGPlayer + Cardmarket), TCGdex for international cards, and PriceCharting for region-exclusive products. Always negotiating from the same data the seller sees.

  • Built for want-lists

    Bulk syntax like top:5 Charizard cards or all Pikachu prints, inline price filters, language tokens. Describe what you're hunting, not every card name.

  • Negotiation comps

    Every row carries 80, 85, 90, and 95 percent of market. Your floor and ceiling are on the page when you sit down at the table.

  • See what you're hunting

    Thumbnails embedded directly in the spreadsheet and PDF binder. Recognize the right printing across a glass case at ten feet.

  • Print and go

    xlsx with totals and per-tag sections, PDF binder pages (3Γ—3 standard or 6Γ—4 condensed), set-completion checklist, structured JSON report. Take the formats you actually use.

  • Multilingual

    Japanese, Korean, Simplified and Traditional Chinese, German, French, Spanish, Italian, Portuguese, and more β€” automatic fallback when a card isn't indexed in English-only sources.

Three steps from idea to show floor.

Designed for the buyer's workflow first β€” but the same pipeline produces a seller's inventory sheet when you bring binders to the table.

  1. 01

    Write your want-list

    Plain text. One card per line. Use shortcuts like top 5 Mew | base set under $50 or all charizard cards | japanese β€” the parser does the rest.

  2. 02

    Run the tool

    pkmn lookup input.txt -o cards.xlsx --pdf binder.pdf --checklist checklist.pdf. Or open the web UI and paste your list β€” same pipeline, no install.

  3. 03

    Walk in informed

    Open the xlsx for live reference, hand the printable binder to the vendor, tick cards off the checklist as you find them. Negotiate from facts.

What you actually walk out with.

Every run produces the same three artifacts β€” pick the format that fits the moment. Screenshots below are rendered from the tracked sample outputs in output/.

Screenshot of the generated cards.xlsx workbook showing card rows with thumbnails, set, number, market price, comparison columns, and a totals row.

Spreadsheet

cards.xlsx

Per-tag sections, thumbnails inline, market price and your 80 / 85 / 90 / 95 % comps on every row β€” with a totals row at the bottom.

  • Screenshot of a single page from the generated binder.pdf showing a 3Γ—3 grid of PokΓ©mon TCG cards with prices.

    Binder PDF

    binder.pdf

    Printable 3Γ—3 binder page β€” thumb, set, number, price. Hand it across the table.

  • Screenshot of a single page from the generated checklist.pdf listing cards by set with checkbox marks.

    Checklist PDF

    checklist.pdf

    Tick boxes by set, in collector-number order. Drop it in your binder and shop.

Newsletter

Get the next release in your inbox.

Occasional, no-pressure updates when a new version ships β€” and the odd Pokemon-TCG-meets-open-source note from @mgzwarrior. No spam, unsubscribe anytime.

Where it's going.

Roadmap organized by area β€” lookup, outputs, cache, web, devops. Speculative ideas live in the full roadmap; the committed work is below.

  • 1.1 β€” Shipped

    Polish and on-ramp: starter-issue curation, CITATION.cff, docs troubleshooting, py.typed marker, Discussions visibility, cache subcommands. Open to first-time contributors.

    View milestone β†’
  • 1.2 β€” In flight

    Persistence foundation and web/site polish. Bridges v1.1's devex work and v2.0's deeper architectural changes.

    View milestone β†’
  • 2.0 β€” Next major

    Structured query DSL, eBay sold-listings, type-aware search, LRU cache with eviction, persistent run history, PyPI + Docker publishing, OpenAPI client codegen.

    View milestone β†’

Full roadmap (including post-V2 monetization and V3+ proposals) lives in the repo.

Recently shipped.

The last few releases at a glance β€” straight from the changelog.

Full changelog β†’
  1. v1.4.0

    Added
    • Design: Tropical design system package (#543). The canonical token source, integration docs, styleguide cards, design-system guidance, and oxlint-backed import guard now give agents and humans one shared visual reference.
    • API + Web: Hosted-demo auth grew from scaffold to full multi-provider sign-in (#407, #408, #409, #410, #411, #517, #530, #61). Auth can now be enabled behind the kill switch with session cookies, /me, logout, GitHub OAuth, Google OAuth, Discord OAuth, Apple sign-in, and Buttondown magic links. The SPA exposes the provider picker, signed-in chip, magic-link flow, sign-out action, and provider-specific chips.
    • API + Web: Collections and wishlists landed as first-class saved-card surfaces (#244, #245, closes #57). New /api/v1/collections and /api/v1/wishlists trees support creating lists, adding cards from results, listing saved items, and rendering minimal SPA surfaces.
    +1 more in the changelog β†’
    Changed
    • CLI + DevOps: CLI package split and maintainability gate (#387). The old monolithic cli.py became the mgz_pkmn.cli package while preserving pkmn help output; make complexity and CI now gate new high-complexity functions, with a repo-analysis skill documenting the workflow that found the hotspot.
    • API + Web: Hosted auth now gates user-owned data (#412, #413, #492). Anonymous hosted visitors use cache-only lookups and see sign-in prompts for saved searches, collections, and wishlists, while self-host / signed-in users keep the full live-fetch and persistence paths.
    • API + Web: Auth account management unified around linked identities (#491). Provider attachment moved into user_identities, OAuth / magic-link providers can be linked and unlinked from the Account panel, /me includes linked identities, and the last-provider safeguard is visible before a user tries to disconnect it.
    +2 more in the changelog β†’
    Fixed
    • API + Web: Account-link redirects land back in the Account modal (#536). Link callbacks return to /account, the SPA opens the Account panel on that path, and link conflicts render inline instead of marooning users on a 404.
    • Deploy: Auth production configuration fixes (#487, #489). Render declares the magic-link SMTP env vars, and uvicorn trusts proxy headers so OAuth callback URLs resolve as https:// behind Render's proxy.
    • Docs: README sponsor assets render correctly (#472). The Buy Me a Coffee button now uses a stable raw image URL.
  2. v1.3.1

    Fixed
    • Release: `rebuild-site` waits for the demo API before triggering the Pages hook (#399). The release workflow polls /version for the new tag before rebuilding the marketing site, with a warn-and-continue fallback so slow Render rollouts do not block the release.
  3. v1.3.0

    Added
    • API + CLI: Split lookup cache with stale-while-revalidate pricing (#372, backend half of #310, epic #368). Structural card data now lives in a no-TTL cache slice while pricing lives in a 24-hour stale-while-revalidate slice; legacy entries migrate lazily, stale reads coalesce background refreshes, and /api/v1/lookup reports X-Cache as HIT, STALE, or MISS.
    • API + CLI: Self-hosted card-image cache and warmer (#371). pkmn cache warm-card-images downloads large / small card art into the persistent cache, GET /api/v1/cards/{card_id}/image/{size} serves cached images with immutable browser caching, and lookup / set-card responses rewrite image URLs when local files exist.
    • Release + Site: Marketing site rebuilds after releases and roadmap cards are milestone-driven (#362). Releases can trigger the Cloudflare Pages hook after the demo API rotates, and the roadmap teaser now renders shipped / in-flight / planned cards from GitHub milestones with graceful fallback content.
    +2 more in the changelog β†’
    Changed
    • Deploy: Persistent disk and runtime-only cache warming (#369). Render now mounts /var/cache, points XDG_CACHE_HOME there, and warms sets at runtime behind freshness manifests instead of during Docker build.
    • Deploy: Per-card catalog warm enabled by default on Render (#375, #377, #378, #379). MGZ_PKMN_WARM_CARDS_ON_STARTUP=1 joins the deployed warm flags so the expensive card pass bakes once onto the persistent disk, then serves from cache until stale.
    Fixed
    • Web: Cache Stats reads large image caches correctly (#390). Byte counts now upcast through GB / TB, the override label now says URL overrides, and docs/cache.md documents the card-image warmer plus deployment-size planning data.
    • Deploy: Render blueprint syncs again (#380, #389, #391, #392). The blueprint declares a starter plan, service-level preview generation, and a 50 GB disk so persistent cache and PR-preview settings survive sync.
    • Web: Per-line timing chips persist after lookup completion (#376). The processing panel now remains as "Last lookup" after an SSE run finishes, preserving stage timings for comparison and debugging.
    +3 more in the changelog β†’