Skip to content

chrisbanes/baton

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

289 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Baton

An unofficial, community-built mobile client for VibeKanban.

About

Baton is an unofficial, community-built mobile client for VibeKanban - an AI-powered development assistant. This app provides a native mobile experience for managing your VibeKanban workspaces, monitoring agent activity, and reviewing code changes on the go.

Note: This is not an official VibeKanban project. For the official VibeKanban repo, see vibekanban/vibekanban.

Features

  • Kotlin Multiplatform: Shared code for Android & iOS
  • Compose Multiplatform: Shared UI framework
  • Orbit MVI: Unidirectional state management
  • Metro DI: Type-safe dependency injection
  • Modular Architecture: Clean api/impl separation
  • Navigation: Retained state with Navigation 3

Architecture

baton/
├── apps/
│   ├── android/          # Android app
│   └── ios/              # iOS app (XcodeGen)
├── shared/
│   ├── core/
│   │   ├── domain/       # Domain models & validation
│   │   ├── data/         # Repositories (api + impl)
│   │   ├── usecases/     # Business logic (api + impl)
│   │   └── ui/           # Shared UI (theme, components, strings)
│   └── feature/
│       ├── root/         # Navigation container
│       ├── onboarding/   # Auth flow
│       ├── settings/     # Settings screen
│       ├── paywall/      # IAP integration
│       └── example-list/ # Example feature (CRUD pattern)

Quick Start

Prerequisites

  • Android Studio or IntelliJ IDEA
  • Xcode 15+ (for iOS)
  • JDK 21+

Setup

  1. Clone repository:

    git clone https://github.com/chrisbanes/baton.git
    cd baton
  2. Customize identifiers (see SETUP.md):

    • Package: me.chrisbanes.baton → yours
    • App name: Baton → yours
    • Bundle IDs in build configs
  3. Local config:

    cp local.properties.template local.properties
    # Edit and set Android SDK path
  4. Build:

    ./gradlew build

Run

Android:

./gradlew :apps:android:installDebug

iOS:

xcodegen -s apps/ios/project.yml
open apps/ios/Baton.xcodeproj

Documentation

Development

Format:

./gradlew spotlessApply

Test:

./gradlew test
./gradlew check  # includes lint

Tech Stack

  • Kotlin: 2.2.21
  • Compose Multiplatform: 1.10.0
  • Orbit MVI: 11.0.0
  • Metro: KSP-based dependency injection
  • Navigation: AndroidX Navigation

Project Structure

Core Modules

  • domain/api: Domain models (ExampleItem, ExampleEvent, User, etc.)
  • data/api: Repository interfaces
  • data/impl: Repository implementations
  • usecases/api: Use case interfaces
  • usecases/impl: Use case implementations
  • ui: Shared UI components, theme, strings

License

Apache License 2.0 - see LICENSE

Acknowledgments

Based on production patterns from real-world Kotlin Multiplatform applications, including:

  • Orbit MVI for predictable state management
  • Metro for type-safe dependency injection
  • Compose Multiplatform for shared UI