No description
  • HTML 67.4%
  • Kotlin 32.6%
Find a file
Elvis Bui 5fa60c83e0 chore: bump version to 0.1.1 and add alpha symbol to splash screen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-25 12:15:50 +01:00
.superpowers/sdd feat: Scanning (#6) 2026-06-24 15:27:29 +00:00
app chore: bump version to 0.1.1 and add alpha symbol to splash screen 2026-06-25 12:15:50 +01:00
docs/agents feat: v0.1.0 — collection UX improvements & bug fixes (#7) 2026-06-25 11:07:47 +00:00
gradle chore: upgrade AGP to 9.2.1 with required dependency updates 2026-06-24 18:08:55 +01:00
graphify-out feat: add graphify scan 2026-06-24 18:12:25 +01:00
.gitignore feat: v0.1.0 — collection UX improvements & bug fixes (#7) 2026-06-25 11:07:47 +00:00
build.gradle.kts feat: initial Pokebox Android MVP scaffold 2026-06-23 20:14:59 +01:00
CLAUDE.md feat: v0.1.0 — collection UX improvements & bug fixes (#7) 2026-06-25 11:07:47 +00:00
gradle.properties fix: enable 16 KB page size alignment for third-party .so libs 2026-06-24 16:36:44 +01:00
gradlew feat: initial Pokebox Android MVP scaffold 2026-06-23 20:14:59 +01:00
gradlew.bat feat: initial Pokebox Android MVP scaffold 2026-06-23 20:14:59 +01:00
README.md feat: v0.1.0 — collection UX improvements & bug fixes (#7) 2026-06-25 11:07:47 +00:00
settings.gradle.kts feat: search tabs, inline binder creation, cache-first search, splash screen 2026-06-23 21:00:04 +01:00

Pokebox — Pokemon TCG Collection App

A Manabox-style Android app for managing your Pokemon TCG collection.

Features

  • Splash screen with version number on launch
  • Search cards by name (Cards tab) or browse all sets (Sets tab) via pokemontcg.io API
  • Set list shows set logos (disk-cached for offline use after first load)
  • Filter by Supertype, Type, Rarity — type filter chips show Pokemon TCG energy icons
  • Sort by Name, Set Number, Rarity, or Price — with ascending/descending toggle; Sort section appears at the top of the Filter & Sort sheet; changing sort scrolls results back to the top
  • Cache-first search: cached results appear instantly while network refreshes in the background
  • Price cache TTL: card price data refreshes automatically after 6 hours
  • CardMarket trending price shown in GBP on card list, card detail, and binder totals
  • View a card's listing directly on CardMarket (opens browser)
  • Card detail: image constrained so all details are visible; tap image to expand fullscreen; swipe left/right to navigate adjacent cards
  • Remove a card from a binder via the trash icon in the card detail app bar (only visible when navigating from a binder)
  • Collection view with donut chart showing per-binder GBP value, total in centre, and card count per binder ("1 card" / "N cards"; hidden when 0)
  • Binder CRUD: create, rename, delete binders; create inline from card detail
  • Binder detail: 3-column card grid with card images; set ID + number shown below each card; quantity badge on image; long-press to edit quantity
  • Add cards to binders with quantities
  • Filter/sort within binders (+ sort by Quantity, Date Added, Price)
  • Export binder as CSV via Android share sheet
  • Offline support: cached cards and sets shown when no network
  • Navigation state preserved when switching between bottom nav tabs
  • Dark/light mode toggle in Settings; defaults to system setting on first install

Requirements

  • Android Studio Ladybug (2024.2.1) or later
  • Android SDK 35 (compileSdk), minSdk 26 (Android 8.0)
  • Java 21

Setup

  1. Install Android Studio (includes SDK and Gradle toolchain)
  2. Open the project: File > Open > select this directory
  3. Let Gradle sync complete (downloads dependencies automatically)
  4. Run on an emulator or device via the Run button

API Key (Optional)

pokemontcg.io is free up to 1,000 requests/day without a key. For higher limits, register at https://dev.pokemontcg.io/ then:

  1. In app/build.gradle.kts defaultConfig block:
    buildConfigField("String", "POKEMON_TCG_API_KEY", "\"your-key-here\"")
    
  2. In di/NetworkModule.kt, add the X-Api-Key header to OkHttpClient.

Running Tests

./gradlew test          # all JVM unit tests (no emulator needed)
./gradlew test --info   # verbose output

Coverage:

  • DAO tests: CardDao, BinderDao, BinderCardDao (Robolectric + in-memory Room)
  • Repository tests: CardRepository (cache-first, offline fallback), BinderRepository (CRUD)
  • ViewModel tests: CardSearchViewModel, BindersListViewModel
  • Util tests: CsvExporter (field order, escaping, filename format)

Project Structure

app/src/main/java/com/pokebox/
├── data/
│   ├── local/       Room entities, DAOs, AppDatabase
│   ├── remote/      Retrofit API, DTOs
│   └── repository/  CardRepository, BinderRepository
├── di/              Hilt modules
├── ui/
│   ├── search/      Card search screen + ViewModel (Cards/Sets tabs)
│   ├── detail/      Card detail screen + ViewModel
│   ├── binders/     Collection screen + ViewModel (donut chart)
│   ├── binderdetail/ Binder detail screen + ViewModel (grid view)
│   ├── settings/    Settings screen + ViewModel (dark mode toggle)
│   ├── splash/      Splash screen
│   ├── components/  Shared Compose components (incl. EnergyTypeIcon, BinderCardGridItem)
│   ├── navigation/  NavGraph, BottomNavBar
│   └── theme/       Material 3 theme
└── util/            CsvExporter, NetworkMonitor, PriceUtils, ThemePreferences