Yu-Gi-Oh! card browser and Deck maker for android, with some tools for dueling and YDK import/export. The data (excluding images for now) is fetched from YGOPRODeck API so the app works fully offline after a sync.
Demo YDK files to import in deck editor for testing are put in the demo/ folder.
The UI is written in Jetpack Compose so LazyColumns and LazyGrids are used as "equivalents" of RecyclerView which isn't available in Compose.
The UI of the app is implemented in Jetpack Compose using material3.
UI Navigation: Navigation Compose and ViewModel + StateFlow for state.
Local database (API Cache + Decks): Room persistence library
API Requests: Retrofit + OkHttp
Preferences: DataStore
- Full-text search of the YGOPRODeck card database (14 000+ cards)
- List/grid card browser with card art thumbnails
- Detailed card view: stats, description, banlist status, set info, prices
- Cache all images, and preferably resize them (if there is a cheap way cpu-cycle wise, image conversion with focus on efficiency is very costly) to mitigate some lag stemming from API serving images that are too highres to be used as thumbnails
- All cards stored in Room via
CachedCardEntity CardSyncWorkerenforces a 15-minute cooldown before re-pulling from the APIWorkManagerperiodic sync keeps the cache fresh
- Create, rename, and delete decks
- Main / Extra / Side deck zones with TCG max 3 copies enforcement
- YDK export — compatible with EDOPro, YGO Omega, etc.
- YDK import — parse existing
.ydkfiles - Activity to open
.ydkfiles directly by intents
| Tool | Description |
|---|---|
| LP Calculator | Dual-player life point tracker with damage, gain, halve, reset |
| Dice Roller | 6-sided or d20 roll |
| Counters | Named counters with increment/decrement |
| Coin Flip | Heads or Tails |
Implement BanlistRepository and a new screen. Format doc:
https://www.ygoprog.com/BanlistBuilder
Add a CardMakerScreen that lets the user fill a custom card form and renders it with Canvas / Compose drawBehind.
- Leverage
CardRepository.searchCardsto pick a random card each day. - Build game logic in a dedicated ViewModel using a seeded
Randomkeyed to today's date.
Add a backend (e.g., Firebase Realtime Database or Ktor WebSockets) and a DraftRepository.
- Base URL:
https://db.ygoprodeck.com/api/v7/ - Full guide: https://ygoprodeck.com/api-guide/