Agent Skill
2/7/2026

docs-maintainer

This skill should be used when updating documentation, checking links, and consolidating information. Use for doc maintenance and consistency.

N
niltsiar
1GitHub Stars
1Views
npx skills add niltsiar/kotlin_multiplatform_pokedex

SKILL.md

Namedocs-maintainer
DescriptionThis skill should be used when updating documentation, checking links, and consolidating information. Use for doc maintenance and consistency.

Pokédex - Kotlin Multiplatform Showcase

A modern, cross-platform Pokédex application demonstrating dual-UI design systems (Material Design 3 Expressive + Compose Unstyled) with shared business logic across Android, iOS, Desktop, and Server.

✨ Key Features

  • Dual-UI Design Systems: Runtime theme switching between Material Design 3 and Compose Unstyled
  • Adaptive Layouts: Responsive grid columns (2/3/4) and navigation (bottom bar → rail → drawer) based on window size
  • Cross-Platform: Single Kotlin codebase for Android, iOS, Desktop (JVM), and Server
  • Shared Business Logic: ViewModels, repositories, and domain models 100% shared across platforms
  • Material 3 Adaptive: Uses official Material3 Adaptive library for responsive layouts
  • Type-Safe Navigation: Navigation Compose 3 with Koin DI integration
  • PokéAPI Integration: Real-time data from official PokéAPI v2

🏗️ Architecture

This project demonstrates production-ready Kotlin Multiplatform architecture with:

  • /composeApp - Compose Multiplatform UI (Android, Desktop, iOS Compose)

    • commonMain - Shared UI code and app entry point
    • Platform-specific folders for Android/iOS/Desktop customizations
    • Dual-theme support with runtime switching
  • /features - Vertical slice feature modules

    • :features:<feature>:api - Public contracts (interfaces, domain models, navigation)
    • :features:<feature>:data - Repositories, DTOs, API services
    • :features:<feature>:presentation - ViewModels and UI state (shared with iOS)
    • :features:<feature>:ui-material - Material Design 3 UI implementation
    • :features:<feature>:ui-unstyled - Compose Unstyled UI implementation
    • :features:<feature>:wiring - Business logic DI (Koin modules)
    • :features:<feature>:wiring-ui-material - Material navigation registration
    • :features:<feature>:wiring-ui-unstyled - Unstyled navigation registration
  • /core - Shared infrastructure modules

    • :core:designsystem-core - Shared theme utilities
    • :core:designsystem-material - Material 3 Expressive theme
    • :core:designsystem-unstyled - Compose Unstyled theme
    • :core:navigation - Navigation 3 modular architecture
    • :core:di - Koin DI configuration
    • :core:httpclient - Ktor HTTP client setup
  • /iosApp - Production iOS app using native SwiftUI

    • Consumes KMP ViewModels via :shared framework
    • Native iOS UI with SwiftUI
    • Direct Integration pattern for ViewModel usage
  • /iosAppCompose - Experimental iOS app using Compose Multiplatform

    • Shares same Compose UI code with Android/Desktop
    • See the README for details
  • /server - Ktor Backend-for-Frontend (BFF)

  • /shared - iOS umbrella framework

    • Exports feature APIs and ViewModels to iOS
    • commonMain - Shared Kotlin code

🚀 Quick Start

Primary Validation (Always Run First)

Before making changes, always run:

./gradlew :composeApp:assembleDebug test --continue

This builds the Android app and runs all 114 tests across all modules (~45 seconds on modern hardware).

Build and Run Android Application

To run the development version of the Android app:

  • on macOS/Linux
    ./gradlew :composeApp:assembleDebug test --continue
    
  • on Windows
    .\gradlew.bat :composeApp:assembleDebug test --continue
    

Features in Android App:

  • Dual-theme switcher via navigation items (Material/Unstyled tabs in bottom bar or rail)
  • Adaptive grid layout (2/3/4 columns based on window size)
  • Adaptive navigation (bottom bar → rail → drawer)
  • Pokemon list with infinite scroll
  • Pokemon detail with stats, types, abilities

Build and Run Desktop (JVM) Application

To run the development version of the desktop app:

  • on macOS/Linux
    ./gradlew :composeApp:run
    
  • on Windows
    .\gradlew.bat :composeApp:run
    

Features in Desktop App:

  • Same dual-theme switcher as Android
  • Window resizing triggers adaptive layouts (grid columns + navigation style)
  • Full keyboard and mouse support
  • Native window decorations

Build and Run Server

To build and run the development version of the server, use the run configuration from the run widget in your IDE’s toolbar or run it directly from the terminal:

  • on macOS/Linux
    ./gradlew :server:run
    
  • on Windows
    .\gradlew.bat :server:run
    

Build and Run iOS Application

Native SwiftUI App (Production):

To build and run the development version of the iOS app with native SwiftUI, use the run configuration from the run widget in your IDE's toolbar or open the /iosApp directory in Xcode and run it from there.

Compose Multiplatform iOS App (Experimental):

To build and run the experimental iOS app using Compose Multiplatform:

  1. Build the framework:

    ./gradlew :composeApp:embedAndSignAppleFrameworkForXcode
    
  2. Open in Xcode:

    open iosAppCompose/iosAppCompose.xcodeproj
    
  3. Run in simulator (Cmd+R)

See iosAppCompose/README.md for detailed information about the Compose iOS implementation.


📚 Documentation

Note: Technical documentation has been consolidated into Agent Skills (.agents/ directory). Skills are the canonical reference. See AGENTS.md for the complete skill catalog and decision trees.

Essential Guides

Project Documentation

Agent Skills (26 Total)

Located in .agents/ — AI agents can load via @skill-name syntax.

For skill selection guidance: See AGENTS.md decision trees and skill categories.

Core Skills: @kmp-critical-patterns, @kmp-architecture, @kmp-presentation, @kmp-data-layer, @kmp-testing-strategy, @kmp-di, @kmp-domain

Platform Skills: @kmp-ios, @kmp-desktop, @compose-screen, @swiftui-screen, @kmp-navigation

API & Build: @ktor-backend, @kmp-api-services, @kmp-gradle, @kmp-commands

Development & Testing: @kmp-developer, @kmp-mobile-expert, @kmp-testing-patterns, @kmp-compose-unstyled

Design & Planning: @product-designer, @ui-ux-designer, @onboarding, @user-flows

Quality: @docs-maintainer

Full skill list and detailed descriptions: See AGENTS.md for all 26 skills organized by category.


🧪 Testing

Test Suite: 114 tests passing (androidUnitTest + commonTest)

Coverage:

  • Repository tests: Success + all error paths (Network, Http, Unknown)
  • ViewModel tests: State transitions with Turbine + TestScope
  • Mapper tests: Property-based tests with Kotest
  • UI tests: @Preview for all @Composable functions

Property-Based Testing:

  • 34 property tests (~34,000 scenarios per run)
  • 40% property tests, 60% concrete tests
  • Mappers: 100% property test coverage

Quick Start Testing:

# Run all tests
./gradlew test --continue

# Run specific module tests
./gradlew :features:pokemonlist:presentation:testDebugUnitTest

See @kmp-testing-strategy skill for comprehensive guide.


🎨 Design Systems

Material Design 3 Expressive

  • Custom Pokémon color scheme (coral primary, yellow secondary, grass green tertiary)
  • Google Sans Flex variable font (Android/Desktop), SF Pro (iOS)
  • Emphasized easing curves for motion
  • 18 Pokémon type colors (WCAG AA compliant)

Compose Unstyled

  • Platform-native theming with automatic light/dark support
  • Headless components with full styling control
  • Same feature set as Material, different visual approach
  • Educational showcase for design system comparison

Theme Switching:

  • Navigation items in bottom bar (compact) or rail (medium/expanded)
  • Two tabs: "Material" and "Unstyled" for instant comparison
  • Entire app switches atomically (scaffold + content)
  • State persisted across sessions
  • First-run modal explains the feature

Build Logic & Convention Plugins

  • For how modules are configured (KMP targets, Android config, Compose, and shared deps), see:
    • @kmp-gradle skill
    • Plugins you will see across the repo:
      • convention.kmp.library, convention.core.library
      • convention.feature.base, convention.feature.api, convention.feature.data, convention.feature.presentation, convention.feature.ui, convention.feature.wiring
      • convention.compose.multiplatform, convention.kmp.android.app

Development Workflow

Commit Message Convention

This project uses Conventional Commits format.

Format:

<type>(<scope>): <description>

Quick Reference:

TypeUse CaseExample
featNew featuresfeat(pokemonlist): add infinite scroll pagination
fixBug fixesfix(pokemondetail): resolve crash on missing sprite data
docsDocumentationdocs(conventions): add commit message guidelines
testTeststest(pokemonlist): add property-based tests for repository
buildBuild/dependenciesbuild(gradle): update Kotlin to 2.1.0
refactorCode refactoringrefactor(designsystem): extract theme tokens to constants
choreMaintenancechore: update .gitignore for build artifacts

Scopes: Use general feature or area names: pokemonlist, pokemondetail, designsystem, navigation, testing, ios, di, conventions

CHANGELOG Generation

This project uses git-cliff to generate changelogs from conventional commits.

Installation (macOS):

brew install git-cliff

Generate/Update CHANGELOG:

git cliff -o CHANGELOG.md

For Releases:

git cliff -o CHANGELOG.md --tag v1.0.0

Configuration: See cliff.toml for git-cliff configuration including commit grouping, scope-based sub-grouping, and GitHub link templates.


Learn more about Kotlin Multiplatform

Skills Info
Original Name:docs-maintainerAuthor:niltsiar