Dylan Matthews

Case study · Invite-only deployed app · public sample-deck preview · public source

Deck Lab

A competitive Commander research and deck-editing workbench built around explicit data and service boundaries.

The problem

Competitive Commander (cEDH) players build 100-card decks against a fast-moving tournament metagame. Card databases show what exists. Aggregate sites show what is popular, often without the sample size behind a percentage. Deck Lab combines a visual deck editor with tournament research: card search, commander profiles, and metagame share with entry counts and time windows. It also connects to a separate goldfish simulator. Card and tournament facts come from a versioned data contract published by a sibling ingestion project. The scope is Commander only.

Contribution and AI assistance

Dylan requests feedback batches, reviews candidates on QA and approves production promotion. The recorded September 10 Research approval states: ‘Load speed is very good. Approved to deploy.’ He also approved public source publication, retirement of legacy hosting on September 23, and a QA-only assistant trial on October 13. These actions establish product direction and release responsibility without claiming manual implementation of every component.

How AI contributed

Coding agents implemented feedback batches in source-only workspaces. An isolated model reviewer participated in the earlier automated release pipeline; that pipeline is now disabled in favor of owner approval. A coordinator independently reviews diffs and runs checks, but the record does not identify that role as human or agent. On the documented competitive build path, the product model supplies narrative and explanations after deterministic card selection.

  • Python
  • Flask
  • PostgreSQL
  • SQLite

Two consequential decisions

Decision 1

Deterministic selection on the competitive build path

The documented competitive build path finishes selection from a curated strategy pack before calling a model for intent interpretation and narrative. If the provider fails or its output is invalid, the selected deck stays unchanged and the missing narrative is labeled. Tests enforce this separation. The supported authored strategy is deliberately narrow; this rule does not claim that every separate generator or QA assistant follows the same path.

Decision 2

Owner-approved releases instead of automatic ones

Feedback fixes used to flow automatically from issue to coding agent to AI review to release. That automation was turned off on September 10, 2026. Now each candidate goes to an isolated QA site with its exact commit and image recorded. Production is promoted only after the owner approves it, and any change to a reviewed fix needs a fresh QA review. Releases are slower and depend on the owner being available.

Verification

  • Research release reviewed on QA (September 10, 2026): 1,414 offline tests passed, 31 optional tests were skipped, and lint, format and type checks passed. Also checked: 24 old/new query-equivalence cases and Chromium and WebKit mobile-viewport acceptance.
  • Production rollout: the merged source tree was verified identical to the approved QA tree. After promotion, HTTPS health, login, CSRF, save/edit, avatar upload and QA isolation all passed.
  • Preview deployment receipt: browser sessions could not read or change each other's decks. CSRF was enforced, publish, share, upload, admin, paid-work and simulation requests were denied, and expiry deleted workspace data.

Outcome and progression

0.17–0.61 s

Default Research results on QA

Recorded browser samples on QA before the September 10, 2026 approval. Filtered search took about 1.2 s. Small samples; not a load test and not a guarantee on physical devices.

All checks passed

Preview isolation rehearsal and deployment checks

Preview deployment receipt for production image f49d14e. Covers cross-session access, CSRF, denied privileged or paid actions and workspace expiry. Not a penetration test.

Milestones

  1. 2026-09-09Production moved to a single DigitalOcean host at decklab.studio; the data contract counts matched the frozen source.
  2. 2026-09-10Automatic releases disabled. Owner approved the QA-reviewed Research release for production.
  3. 2026-09-13Public no-login preview with curated sample decks published.
  4. 2026-09-23Legacy hosting retired after owner authorization.

What I would measure next

A load test of Research (default, Meta and filtered search) on the production host at a stated number of concurrent sessions, reporting p50/p95 latency and memory. Current timings are small samples.

Try the workflow

  1. Open the preview. The banner says your changes are private and reset after 2 hours.
  2. Select Research, then Meta, to see commander meta share with entry counts, Top 16 rate and a time window.
  3. Return to Build and open the Kinnan sample deck.
  4. On the playmat, add a role to a card or mark it Good pick, then press Undo.
  5. Switch to Decklist to read the full list.

Evidence and further reading