Decksmith is a personal tool for building Magic: The Gathering decks and generating clean, print-ready proxy sheets.
It is designed first for my own use: to experiment, iterate, and build decks seriously — with a
strong focus on correctness, structure, and long-term maintainability.
If it’s useful to others, even better.
Most deckbuilders focus on collection management or online play.
Decksmith focuses on craft:
- building decks deliberately
- iterating on ideas
- preparing clean proxy sheets ready for printing and cutting
The goal is not to replace existing tools, but to offer a focused, well-engineered workflow from decklist to physical playtest.
Decksmith follows a few simple principles:
- Separation of concerns
UI, domain logic, data contracts, and infrastructure are clearly separated. - Explicit contracts
All data exchanged between systems is validated and documented. - Print correctness over convenience
Generated PDFs are deterministic and printer-friendly. - Built as a real product, even if it starts as a side project
- Deck creation and editing (Commander first)
- Decklist import (plain text)
- Card search via Scryfall
- Proxy sheet generation (A4, 3×3 layout)
- Print-ready PDF export (crop marks, correct sizing)
Future features may include:
- deck versioning
- tags and notes
- public deck sharing
- mobile companion app
Decksmith is built as a modular monorepo, designed to support:
- a web application
- a future mobile application
- background jobs (PDF generation)
- shared logic and contracts
-
apps/web
Web SPA (React) for deck building and print preparation -
apps/mobile
Mobile app (Expo) planned for later -
apps/api
HTTP API handling authentication, deck data, and job orchestration -
apps/worker
Background worker responsible for PDF generation and heavy tasks
-
packages/schema
Zod schemas defining all API contracts (DTOs) -
packages/domain
Pure domain logic (deck parsing, rules, print planning) -
packages/api-client
Typed API client shared by web and mobile -
packages/query
Shared TanStack Query hooks and query keys -
packages/db
Prisma schema and database access (server-side only) -
packages/scryfall
Scryfall client, normalization, and caching strategy -
packages/pdf
Deterministic PDF generation engine (A4, layouts, crop marks) -
packages/tokens
Shared design tokens (spacing, radius, colors) -
packages/web-ui
Web UI components (shadcn + Tailwind) -
packages/native-ui
Mobile UI components (React Native)
- React + TypeScript
- Vite
- TanStack Router
- TanStack Query
- Tailwind CSS
- shadcn/ui
- Node.js
- Fastify
- Prisma
- Supabase (Postgres, Auth, Storage)
- pnpm + Turborepo
- Zod (schemas and validation)
- Vitest / Playwright
- Storybook
- Spec-driven development (ADR + task specs)
Decksmith is built incrementally, with a strong emphasis on:
- small, reviewable changes
- explicit architectural decisions (ADR)
- documentation written alongside code
- avoiding premature abstraction
This project is also an experiment in using AI as a coding assistant, not as a replacement for design or judgment.
Decksmith is under active development and not yet production-ready.
APIs and internal structure may change as the project evolves.
Personal project.
License to be defined if the project is made public.