Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

352 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

edh.reilley.dev

A browser-based 4-player Commander (EDH) table for playing with friends.

Authoritative rules engine on the server, MTGA-style board in the client, plus auth, lobby, and a deck builder over a growing card pool. One player hosts a table; everyone else claims a seat with their own deck. Eliminated players stay as spectators.

Status

Early and incomplete on purpose. The north star is to support any card faithfully — grown from real cards, with gaps flagged rather than faked. Today that means ~665 deckable card scripts (crates/cards/data/) and an engine that is not rules-complete. The five Secrets of Strixhaven (soc) Commander decks (~389 unique cards) are the first proving ground, not the end of the roadmap.

The public origin ships robots.txt that disallows crawlers; this is a friends table, not a content site.

Stack

Layer Tech
Engine Pure Rust, deterministic stack/priority state machine
Cards Data-driven TOML scripts (crates/cards/data/)
Wire .proto → tonic gRPC (API) + Effect RPC (browser → Nitro BFF)
API tonic gRPC (game / auth / decks / catalog / seed) + Axum /health/* only
BFF / client Foldkit SPA on Nitro (Vite); lobby + table_routes on Postgres mtgfr_web (Drizzle); canvas + Mount bitmap board + thin HTML overlays
Durable data Postgres mtgfr (users, sessions, decks); mtgfr_web (lobbies, table→pod routes)
Deploy k3s + Cloudflare Tunnel; Argo-owned API/web rolls with SIGTERM drain

Live games stay in memory per API process. Concurrent pods pin each table via BFF table_routes → pod DNS. Hands and libraries are filtered server-side — private info never leaves for the wrong seat.

Local development

docker compose up -d          # Postgres on :5432 (`mtgfr` + `mtgfr_web`)
just migrate                  # Toasty → mtgfr
just client-migrate           # Drizzle → mtgfr_web (defaults WEB_DATABASE_URL to local compose)
just dev                      # tmux: bacon server (:8080) + Foldkit/Vite client (default :3000)

WEB_DATABASE_URL defaults to postgresql://mtgfr:mtgfr@127.0.0.1:5432/mtgfr_web (same pattern as the API’s config/mtgfr.toml). Override when pointing at a remote DB.

Useful checks:

just check        # format, lint, typecheck, test (server + client)
just test
just --list

Docs

Agent-oriented working notes live in AGENTS.md. Releases are cut by semantic-release on main (PRs are squash-merged — the PR title is the release signal).

License

Copyright 2026 Reilley. Licensed under the Apache License 2.0. That covers the software in this repository only — Magic: The Gathering names, card text, art, and related trademarks remain the property of Wizards of the Coast.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

Packages

Used by

Contributors

Languages