Skip to content

Latest commit

Β 

History

History
57 lines (41 loc) Β· 2.25 KB

File metadata and controls

57 lines (41 loc) Β· 2.25 KB

TopOut πŸ§—β€β™‚οΈ

Kotlin Multiplatform app for climbers. Track your climbing sessions with real-time alerts on height changes, natively on iOS and Android.

🎯 Features

β€’ Clean Architecture - Backend business logic shared in Kotlin, native UIs with Jetpack Compose (Android) and SwiftUI (iOS)
β€’ Declarative DI - Koin setup with Singleton & Factory patterns, bridging ViewModels to native layers
β€’ Platform Features - expect/actual structure for sensors and notifications across platforms
β€’ Background Tracking - Sensor data aggregation with Coroutines + WakeLock (Android), Background Tasks (iOS)
β€’ Storage - SQLDelight for offline database + Firestore for remote sync. Anonymous sign-in, no user sign-up required
β€’ Offline First - Full offline mode with conflict resolution. Changes sync seamlessly when connectivity returns
β€’ Native UX - Native UI components, theme design system, and Lottie animations

πŸ—οΈ Architecture

β”œβ”€β”€ composeApp/     # Android - Jetpack Compose UI
β”œβ”€β”€ iosApp/         # iOS - SwiftUI UI  
└── shared/         # Shared Kotlin business logic
    β”œβ”€β”€ commonMain/ # Domain, data, DI modules
    β”œβ”€β”€ androidMain/# Android platform implementations
    └── iosMain/    # iOS platform implementations

Tech Stack:

  • Shared: Kotlin Multiplatform, Koin DI, SQLDelight, Ktor, Firebase Firestore, Coroutines
  • Android: Jetpack Compose, Material 3, Navigation, Maps, Vico Charts, Lottie
  • iOS: SwiftUI, Core Motion, Background Tasks, Core Location

πŸš€ Quick Start

Prerequisites: JDK 17+, Android Studio, Xcode 15+

git clone https://github.com/InonELGABSI/TopOut.git
cd TopOut

# Android
./gradlew :composeApp:installDebug

# iOS  
./gradlew :shared:syncFramework
# Then open iosApp.xcodeproj in Xcode

πŸ“± Key Components

LiveSessionManager - Real-time session tracking with sensor fusion
expect/actual - Platform abstractions for sensors, notifications, background tasks
Offline Sync - Conflict resolution with sync flags in SQLDelight schema
Anonymous Auth - Firebase auth without registration, data persists until app deletion


Built for the climbing community πŸ§—β€β™€οΈπŸ§—β€β™‚οΈ