a07522a189
React 19 SPA + node:http/node:sqlite API in one container. Card data is baked into the image from a Scryfall bulk build, so the runtime never calls Scryfall. No server-side user state: decks live in the browser and travel in the share URL, which is why there is no PVC and replicas: 1 is correct. Adds a README covering the architecture and the reasoning behind it, and publishes the project skills under .claude/skills/. Co-Authored-By: Claude Code <noreply@anthropic.com>
31 lines
867 B
JSON
31 lines
867 B
JSON
{
|
|
"name": "magik",
|
|
"version": "1.0.0",
|
|
"private": true,
|
|
"type": "module",
|
|
"description": "MAGIK — a Magic: The Gathering Commander (EDH) deck builder",
|
|
"scripts": {
|
|
"dev": "concurrently -n web,api -c cyan,magenta \"vite\" \"node --watch server/index.mjs\"",
|
|
"build": "vite build",
|
|
"preview": "vite preview",
|
|
"api": "node server/index.mjs",
|
|
"cards:build": "node scripts/build-cards.mjs",
|
|
"cards:verify": "node scripts/verify-cards.mjs",
|
|
"typecheck": "tsc --noEmit",
|
|
"test": "node --test tests/"
|
|
},
|
|
"dependencies": {
|
|
"react": "^19.2.0",
|
|
"react-dom": "^19.2.0",
|
|
"react-router-dom": "^7.9.1"
|
|
},
|
|
"devDependencies": {
|
|
"@types/react": "^19.2.0",
|
|
"@types/react-dom": "^19.2.0",
|
|
"@vitejs/plugin-react": "^5.0.0",
|
|
"concurrently": "^9.2.0",
|
|
"typescript": "^5.9.0",
|
|
"vite": "^7.1.0"
|
|
}
|
|
}
|