// README.md
A Flutter app that provides daily card suggestions for Magic: The Gathering Commander decks using the Scryfall API.
- Daily Card Suggestions: Get regular cards and game changer cards suggestion every day
- Land & Spell Separation: Separate suggestions for lands and spells
- Scryfall Integration: Downloads and updates card data from Scryfall API every two weeks
- Commander Ban List: Automatically filters out banned cards
- Advanced Filtering:
- Spells: Filter by card types, colors, mana cost, and keywords
- Lands: Filter by land types, produced mana, and special lands
- Offline Support: Stores card data locally for offline access
- Deterministic Selection: Same daily cards for all users on the same day
- Artist Credits: Shows artist information for card artwork
- Support & Info: Added support and acknowledgement sections
Home screen
Menu
Home screen spell filter
Home screen land filter
- Flutter SDK (>=3.0.0)
- Dart SDK (>=3.0.0)
- Android Studio or VS Code with Flutter extension
- Clone this repository
- Run
flutter pub getto install dependencies - Run
flutter runto start the app
http: For API calls to Scryfallshared_preferences: For local data persistencecached_network_image: For efficient image loading and cachingprovider: For state managementintl: For date formatting
lib/
├── main.dart # App entry point
├── models/
│ ├── mtg_card.dart # MTG card data model
│ ├── bulk_data.dart # Scryfall bulk data models
│ ├── card_enums.dart # Card types and color enums
│ └── filters/
│ ├── base_filter_settings.dart
│ ├── spell_filter_settings.dart
│ └── land_filter_settings.dart
├── services/
│ └── card_service.dart # Main service for card data management
├── screens/
│ ├── home/ # Main screen with daily cards
│ └── filter/ # Filter configuration screens
└── widgets/
├── app_drawer.dart # Navigation drawer
├── app_bar.dart # Custom app bar
└── card_suggestion_section.dart
- Data Download: On first launch, downloads all Commander-legal cards from Scryfall's bulk data API
- Local Storage: Stores card data locally using SharedPreferences (JSON format)
- Auto Updates: Checks for new card data every 2 weeks and updates automatically
- Daily Selection: Uses date-based seeding to ensure deterministic daily card selection
- Filtering: Applies user preferences to filter available cards
- Ban List: Maintains an up-to-date Commander ban list to exclude banned cards
The app uses the Scryfall API responsibly:
- Downloads bulk data instead of making individual card requests
- Updates data only every 2 weeks to minimize API calls
- Caches all data locally for offline use
- Respects Scryfall's rate limits and guidelines
- Add new properties to
FilterSettingsclass - Update the
matchesCardmethod to include new filters - Add UI elements in
FilterScreen
Update the _isCommanderBanned method in CardService with the latest banned cards.
Adjust the _isGameChanger method in CardService to change criteria for game-changing cards.
flutter build apk --releaseflutter build ios --release- Fork the repository
- Create a feature branch
- Make your changes
- Add tests if applicable
- Submit a pull request
This project is licensed under the AGPL-3.0 License - see the LICENSE.md file for details.
- Scryfall for providing the comprehensive MTG card API
- The Flutter team for the excellent framework
- The MTG community for feedback and suggestions



