{"id":30063442,"url":"https://github.com/gurleyryan/sparkroot","last_synced_at":"2026-04-13T14:31:10.246Z","repository":{"id":307713414,"uuid":"1019850982","full_name":"gurleyryan/SparkRoot","owner":"gurleyryan","description":"Transform your physical collection into optimized decks through an intuitive, beautifully designed web interface with powerful Python algorithms for complex deck generation tasks.","archived":false,"fork":false,"pushed_at":"2025-08-01T18:20:24.000Z","size":7766,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-01T19:34:22.072Z","etag":null,"topics":["cards","deck-building","fastapi","magic","magic-the-gathering","mtg","mtg-cards","nextjs","python","railway","react","redis","supabase","tcg","typescript","vercel"],"latest_commit_sha":null,"homepage":"https://www.sparkroot.cards","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gurleyryan.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"gurleyryan","patreon":"gurley","custom":["https://paypal.me/gurleyryan","https://venmo.com/gurleyryan","https://gurleymusic.com","https://discord.com/servers/grand-gurley-generation-1058905149956948108"]}},"created_at":"2025-07-15T01:28:23.000Z","updated_at":"2025-08-01T18:20:28.000Z","dependencies_parsed_at":"2025-08-01T19:47:10.751Z","dependency_job_id":null,"html_url":"https://github.com/gurleyryan/SparkRoot","commit_stats":null,"previous_names":["gurleyryan/mtg-deck-optimizer"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/gurleyryan/SparkRoot","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurleyryan%2FSparkRoot","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurleyryan%2FSparkRoot/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurleyryan%2FSparkRoot/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurleyryan%2FSparkRoot/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gurleyryan","download_url":"https://codeload.github.com/gurleyryan/SparkRoot/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gurleyryan%2FSparkRoot/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31757477,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-13T13:27:56.013Z","status":"ssl_error","status_checked_at":"2026-04-13T13:21:23.512Z","response_time":93,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cards","deck-building","fastapi","magic","magic-the-gathering","mtg","mtg-cards","nextjs","python","railway","react","redis","supabase","tcg","typescript","vercel"],"created_at":"2025-08-08T04:26:04.555Z","updated_at":"2026-04-13T14:31:10.225Z","avatar_url":"https://github.com/gurleyryan.png","language":"TypeScript","funding_links":["https://github.com/sponsors/gurleyryan","https://patreon.com/gurley","https://paypal.me/gurleyryan","https://venmo.com/gurleyryan","https://gurleymusic.com","https://discord.com/servers/grand-gurley-generation-1058905149956948108"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"frontend/public/logo.png\" alt=\"SparkRoot Logo\" width=\"256\" /\u003e\n\u003c/p\u003e\n\n# \u003cimg src=\"frontend/public/logo.png\" alt=\"SparkRoot Logo\" width=\"32\"/\u003e SparkRoot\n[![Next.js](https://img.shields.io/badge/Next.js-15-black.svg)](https://nextjs.org/)\n[![React](https://img.shields.io/badge/React-19-blue.svg)](https://reactjs.org/)\n[![Python](https://img.shields.io/badge/Python-3.8+-green.svg)](https://python.org)\n[![FastAPI](https://img.shields.io/badge/FastAPI-Latest-green.svg)](https://fastapi.tiangolo.com/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-5-blue.svg)](https://typescriptlang.org/)\n[![License](https://img.shields.io/badge/License-BUSL--1.1-yellow.svg)](LICENSE)\n[![Status](https://img.shields.io/badge/Status-Deployed-brightgreen.svg)](https://sparkroot.cards/)\n\n**Magic: The Gathering collection manager and deck optimizer. Upload your collection, generate legal Commander decks, and analyze deck quality—all in a modern web interface.**\n\n## Features\n\n- Upload your MTG collection (CSV formats: [Moxfield](https://moxfield.com/), [Manabox](https://manabox.app/), etc.)\n- Automatic card data enrichment from [Scryfall](https://scryfall.com/)\n- Generate and save legal Commander decks from your collection\n- Analyze deck quality and composition\n- Export decks in TXT, JSON, and CSV formats\n- Secure user authentication and collection management\n\n### Planned\n\n- Real-time pricing and collection valuation\n- User profiles and community features\n- Any community-requested features\n\n## 🔧 Technical Details\n\n### **Architecture**\n- **Frontend**: Next.js + React + TypeScript + Tailwind CSS\n- **Backend**: Python FastAPI for efficient data processing and deck generation\n- **Data Source**: Scryfall API and Supabase PostgresSQL for complete, up-to-date card information and storage  \n- **Format Support**: Commander with [bracket](https://magic.wizards.com/en/news/announcements/introducing-commander-brackets-beta), [salt](https://edhrec.com/top/salt), and *house rules* options\n- **Deployment**: Vercel (frontend) + Railway/Redis (backend) + Supabase (data storage)\n\n\u003e House rules are Bracket 1 and no Sol Ring, nonland tutors, or some 'unfun' cards like Armageddon, Winter Orb, and Stasis.\n\n### **Manual Setup**\n\n**Prerequisites:**\n- Node.js 18+ and npm\n- Python 3.8+ and pip\n- Git for version control\n\n**Backend Setup:**\n```powershell\ncd backend\npython -m venv venv\nvenv\\Scripts\\Activate.ps1\npip install -r requirements.txt\n```\n\n**Frontend:**\n```powershell\ncd frontend\nnpm install\n```\n\n**Run Development Servers from Root:**\n```powershell\n./run.ps1\n```\n\n## Architecture\n\n```\nMTG-Deck-Optimizer/\n├── frontend/              # Next.js 15 + React 19 application\n│   ├── src/\n│   │   ├── app/          # App Router pages and layouts\n│   │   ├── components/   # Reusable React components\n│   │   ├── lib/          # API client and utilities\n│   │   ├── stores/       # Zustand state management\n│   │   └── types/        # TypeScript definitions\n│   ├── public/           # Static assets\n│   └── tailwind.config.js # Tailwind CSS configuration\n│\n└── backend/              # FastAPI Python application\n    ├── main.py          # API server entry point\n    ├── deckgen.py       # Deck generation algorithms\n    ├── deck_analysis.py # Advanced deck scoring\n    ├── utils.py         # Utility functions\n    ├── data/            # Scryfall card database\n    └── requirements.txt # Python dependencies\n```\n\n## Data Files\n\nSome large files (like `scryfall_all_cards.json`) are not in git. Download from [Scryfall API](https://scryfall.com/docs/api/bulk-data) or use the provided script in `data/`. In SparkRoot, these are uploaded to a public.cards table in Supabase.\n\n## API\n\nThe FastAPI backend provides REST endpoints and automatic OpenAPI docs at `http://localhost:8000/docs`.\n\n## Attributions\n\nIcons from [Mana Font](https://mana.andrewgioia.com/) by Andrew Gioia.\n\u003e All mana images and card symbols © Wizards of the Coast.\u003cbr\u003e\nThe Mana font is licensed under the the SIL OFL 1.1.\u003cbr\u003e\nMana CSS, LESS, and Sass files are licensed under the MIT License.\u003cbr\u003e\n\n## Sources\n\n- [Intro guide to Commander (EDH) decks](https://archidekt.com/decks/1048638#EDH__Deck_Template_(read_description_at_bottom))\n- [What's an Optimal Mana Curve and Land/Ramp Count for Commander?](https://www.tcgplayer.com/content/article/What-s-an-Optimal-Mana-Curve-and-Land-Ramp-Count-for-Commander/e22caad1-b04b-4f8a-951b-a41e9f08da14/)\n- [Commander Deckbuilding Template for the New Era](https://www.youtube.com/watch?v=OSNV6224cHg)\n\n## License \u0026 Disclaimer\n\nThis project is licensed under the [Business Source License 1.1(BUSL-1.1)](LICENSE).\n\n \u003e Magic: The Gathering® and all related logos, fonts, and trademarks are property of Wizards of the Coast. SparkRoot is unofficial Fan Content permitted under the [Fan Content Policy](https://company.wizards.com/en/legal/fancontentpolicy). Not approved/endorsed by Wizards. Portions of the materials used are property of Wizards of the Coast. ©Wizards of the Coast LLC.\n\n## Contributing\n\nWe welcome contributions! Please:\n- Open issues for bugs, feature requests, or questions\n- Fork the repo and submit pull requests for improvements\n- Follow clean code practices and keep changes focused\n- Add clear commit messages and documentation for new features\n- Join the [Discord](https://discord.gg/3TC9QkPSc6) for discussions and support\n\n## Contact\n\nFor questions, feedback, or collaboration opportunities:\n\n- **GitHub**: [@gurleyryan](https://github.com/gurleyryan)\n- **Email**: [gurleyryan@gmail.com](mailto:gurleyryan@gmail.com)\n- **Discord**: [Grand Gurley Generation](https://discord.gg/3TC9QkPSc6)\n- **Website**: [Gurley Music](https://gurleymusic.com)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgurleyryan%2Fsparkroot","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgurleyryan%2Fsparkroot","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgurleyryan%2Fsparkroot/lists"}