CoOp:Anything
게임을 검색해 협동 플레이 가능한 모드·단계·품질·커뮤니티 평점을 확인합니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗A Magic: The Gathering Commander tool for Filipino players. Search a card and see, on one page:
Each card page also shows its official rulings and lists every printing with the cheapest PH copy of each, and hovering any card link shows a quick preview (artwork, cheapest price, shop). Cards on the Commander Game Changers list carry a small red "Game Changer" label everywhere in the app.
On the front page, browse by deck theme (Tokens, Aristocrats, Landfall and 400 more): see the commanders most often built around a theme on EDHREC, and the cards those decks play.
Then collect cards on the Shopping page (or paste a list from Moxfield or Archidekt), price them all, and get a shopping list that uses the fewest stores possible, with a ready-to-send order message for each store. Prices always use the cheapest printing of a card, whatever printing your list names. A card costing ₱100 or more gets a drop arrow beside its name: it opens the cheaper alternatives, cards with a similar effect in the same colors that are in stock for less, cheapest first, each with its hover preview. Swap puts one on the list in the card's place.
The Binder holds your collection. Paste a list (4 Llanowar Elves, a Moxfield or Archidekt
export) or upload a CSV from a collection app such as ManaBox, Deckbox or Dragon Shield; any CSV
with a name column and a count column works. Add to what's there or replace it, change counts
card by card, and filter by color, type or commanders.
Decks are built and judged by one set of rules, drawn from deckbuilding guides (The Command Zone's template and videos on mana curves and mana bases):
Create Commander Deck builds a deck from the binder, one step at a time:
A deck in progress is saved as you go, so you can leave and continue later. Saved decks go to My Decks, each shown by its commander with its name and how many cards you'd need to buy. Click one to open its page: everything below, for that deck, with every change saved to it. Right-click it (or use its ⋯ button) to add only the cards missing from your binder to Shopping, copy it, or delete it.
Where the binder is saved. The binder and My Decks are kept in your browser and, when you
open The Theorist from its launcher (or npm run dev), in files on your computer too
(.data/saved/binder.json and decks.json, each with the previous version beside it). Browsers
keep storage per address, port included, and the launcher moves to the next port when 3000 is
busy, so without the computer's copy the binder could look empty after a restart. Now whichever
port or browser opens the app gets the newest copy; an older browser copy is merged in rather than
lost. The binder page says where it's saved, and Download a backup saves it as a CSV that the
import box reads back. If the browser's storage fills up, rebuildable caches are cleared first so
the binder still fits.
Each deck in My Decks has its own page. Beside its name it shows the deck's Commander Bracket, such as "Bracket 2 nearing 3": worked out from its Game Changers, mass land denial, extra turns and combos (rated by Commander Spellbook), following Wizards of the Coast's October 2025 bracket rules. In every tab, resting the mouse on a card (its name, its picture or an add button) shows its preview.
Check a Deck (My Decks → "Check a pasted list") does all of this for any pasted list without
saving it. Under Saved decks and sharing there, save it to My Decks, or copy the deck as a code
(TT1.…, the whole deck and its commander in one line), a link, or a plain list for Moxfield and
Archidekt. Paste a code into "Paste a deck list" on any copy of The Theorist to load it. Codes are
made and read in the browser; no deck is sent to a server to share it.
On a deck's page, Add to Shopping puts only the cards you don't own into the Shopping list, so you can price them in Philippine stores: copies in your binder are taken off (own 1 of a card the deck runs 2 of, and 1 goes on the list), and basic lands are left out unless you ask. Nothing else changes the Shopping list.
The look is themed on Jace Beleren, the Theorist: always midnight navy, with moonlit text and mind-blue light on whatever is active. The graphics are original: a sigil (rune rings around a diamond "mind's eye") and a faint thought lattice behind every page. On phones the sections move to a tab bar along the bottom.
Things move with purpose, briefly, using strong ease-out curves:
<ViewTransition>); browsers without them just change page.Animations only move, scale and fade, so they stay smooth. They're switched off when the system asks for reduced motion.
Anyone with Windows 10 or 11 and an internet connection can run the app from GitHub's ZIP. Nothing needs installing first.
The app uses port 3000, or the next free port if another program has it. To remove everything, delete the folder.
Anyone with macOS 11 (Big Sur) or newer and an internet connection can run the app. Nothing needs installing first, and it works on Apple silicon and Intel Macs.
Get the ZIP (The Theorist for Mac.zip, or Code → Download ZIP on the GitHub page) and double-click it in Finder to unzip it. Move the unzipped folder somewhere permanent, such as Documents.
Open the folder and double-click Start The Theorist.command. The first time, macOS won't open it because it isn't from the App Store or an identified developer:
macOS remembers this, so later double-clicks just work. If it still won't
open, start it from Terminal instead: type bash (with a space), drag the
file into the Terminal window, and press Return.
The first start takes about 5 to 10 minutes. If the Mac has no Node.js, the launcher downloads a private copy from nodejs.org into the folder (it checks nodejs.org's published checksum first). Then it installs the app's packages and builds it. Later starts take a few seconds.
Your browser opens the app. Keep the Terminal window open while you use it, and close it (or press Control-C) to stop the app. If macOS asks whether "node" may accept incoming network connections, click Deny. Allow it only if you want phones on the same Wi-Fi to use the app.
The app uses port 3000, or the next free port if another program has it. To remove everything, move the folder to the Trash.
To make the Mac ZIP from this repository, run
git -c core.autocrlf=false archive --format=zip --prefix="The Theorist/" -o "The Theorist for Mac.zip" HEAD.
It keeps the launcher's permission to run, which a ZIP made with Windows
Explorer loses (macOS then refuses to start it).
On Linux, install Node.js 20.9 or newer, then run
npm ci, npm run build and npm start in the folder.
Needs Node.js 20.9 or newer.
npm ci
npm run dev # http://localhost:3000
Other scripts:
| Command | What it does |
|---|---|
npm test | Unit tests (Vitest), offline using saved pages |
npm run lint | ESLint |
npm run build | Production build |
npm start | Serve the production build |
npm run fixtures:update | Re-download the saved TCGph/EDHREC/Scryfall test pages |
Run npm run fixtures:update && npm test now and then: if TCGph or EDHREC change
their pages, the tests fail instead of the app quietly showing wrong prices.
The Market tab lists cards whose market price (TCGplayer) jumped the most over the past day, week or month, with the cheapest copy in Philippine stores. Market prices are US dollars; the app shows them in pesos at the day's exchange rate (hover a price for the dollars), and so does the "US market price" on each card page. The rate is the European Central Bank's reference rate via Frankfurter, updated each working day, or ExchangeRate-API's open rate if Frankfurter can't be reached; the page names the rate, its day and its source. If neither answers, prices stay in dollars. These are a guide to a card's value; what Philippine stores actually charge is the TCGph price under each card. Two sources for the trends, best first:
.github/workflows/market-trends.yml runs every day on GitHub. It
reads MTGJSON's 90-day price history as a stream (scripts/build-market-trends.ts) and
publishes trends.json on the trends-data branch. Every copy of the app reads it, but only
while the repository is public..data/price-history. It compares against
earlier days, so surges show from the second day it runs, and weekly ones after a week.Only Commander-legal cards that cost at least $2 (about ₱127) and rose by at least 10% (and 50 cents) count.
Below them, the price history explorer compares any two days the app has saved and lists the
biggest rises or falls between them (by percentage or amount, above a minimum price in pesos), each with
its full set name, price line and the cheapest PH copy. PH deals (next to "Rank by") tracks
bargains: it checks Philippine stores for every listed card and keeps only the printings a store
sells for at least 20% under their market price. It compares the same printing (a non-foil copy
from the same set), so a cheaper reprint doesn't count; each deal shows the store, the price and how
far under market it is, linking to the listing. The app keeps 90 days of prices in
.data/price-history (one compressed file a day, about 65 MB in all), and keeps saving them even
when the shared file is used.
Copy .env.example to .env.local (locally) or set these in your host:
| Variable | Required | Purpose |
|---|---|---|
APP_URL | Recommended in production | Your site's URL, added to our User-Agent so Scryfall, EDHREC and TCGph can see who is calling |
TRENDS_URL | No | Where to read the shared price-trends file; defaults to this repository's trends-data branch |
Scryfall and Commander Spellbook have official APIs. EDHREC and TCGph are read from the same pages their own websites use, so the app is built to stay a light, polite visitor:
src/proxy.ts): 60 card pages per minute,
120 search suggestions per minute, 350 price checks per 10 minutes.If a site asks you to stop or offers an API, follow that.
APP_URL to the site's URL.On Vercel, the 'use cache: remote' caches are shared by every server instance
automatically, so a card looked up once is served from cache to everyone.
The built-in rate limits count per server instance. Vercel can run several
instances at once, so for a hard, shared cap also add rate-limit rules in
Firewall (for example on /api/price and /card). Rate-limit rules may
depend on your Vercel plan.
npm ci
npm run build
npm start # PORT=3000 by default
A single Node.js process keeps the cache and rate limits in memory, which is
fine for one server. Put it behind a reverse proxy (nginx, Caddy) that sets
X-Forwarded-For; otherwise every visitor shares one rate-limit bucket. Running
several instances needs a shared cache handler; see Next.js's cacheHandlers docs.
npm audit warningnpm audit reports a high-severity issue in braces, pulled in by
eslint-config-next for linting. It only runs on developer machines and CI, never
in the deployed app (npm audit --omit=dev reports 0 vulnerabilities), and no
fixed version of braces exists yet. npm audit fix --force would downgrade the
lint config to an old Next.js version, so don't run it.