Summary
The Android app currently contains most of the core capture, metadata, and upload logic for KartaView, while the iOS app implements a smaller subset of these features. Improving the Android codebase presents an opportunity to also benefit the iOS app and create a more consistent experience and data pipeline across both platforms.
This issue proposes a prioritized roadmap focused on shared logic, modularization, and cross-platform alignment. The goal is to reduce duplication, improve maintainability, and ensure both apps produce high-quality, consistent data.
✅ Proposed Roadmap (Prioritized)
Phase 1 — Foundation (High Priority)
-
Migrate core Android logic fully to Kotlin
Modernize and simplify the codebase, making future modularization possible.
-
Modularize the Android project
Extract core modules such as:
core-models
core-metadata
core-upload
core-capture
This separates Android-specific code from portable business logic.
-
Document the capture + upload pipelines
Include metadata rules, GPS filtering, EXIF tags, queue logic, etc.
This helps align both platforms.
-
Extract shared metadata formats and constants
Unify EXIF tags, sequence metadata, timestamp rules, and ID formats.
Phase 2 — Shared Logic & Cross-Platform Alignment
- Create a shared “KartaView Core” library
Options include Kotlin Multiplatform, C++, or Rust.
Start with:
Data models
Metadata construction
Upload queue logic
GPS filtering
Android and iOS can both adopt this core.
-
Standardize the capture metadata specification
Define a consistent format for timestamps, orientation, GPS accuracy, frame indexing, etc.
-
Standardize upload API behavior
Use a shared OpenAPI schema or protobuf model to auto-generate client code for Android and iOS.
Phase 3 — Capture Pipeline Unification
-
Move frame-processing logic to shared native code
A single library for frame extraction, rotation correction, and metadata enrichment.
-
Implement missing iOS features using shared logic
iOS gains configurable capture interval, GPS smoothing, metadata enrichment, etc.
-
Add a shared test suite
Core logic becomes testable across platforms.
Phase 4 — Ecosystem Improvements
-
Automated APK releases via CI/CD
Keep GitHub releases current and reproducible.
-
Cross-platform “sequence validator” CLI tool
To check EXIF metadata, timestamps, GPS continuity, and detect anomalies.
-
Provide a formal “data quality” spec
Defines what constitutes a good or valid sequence on both platforms.
Phase 5 — Long-Term Enhancements
-
Consider migrating heavy processing to Rust or optimized C++
Shared, high-performance capture and metadata logic.
-
Harmonize UI/UX principles across Android and iOS
-
Add optional anonymous telemetry for debugging capture/upload problems
✅ Why This Helps Both Platforms
Android gains cleaner modular architecture
iOS gains missing features from shared logic
Server-side ingestion benefits from more consistent metadata
Future work becomes easier and faster
Community contributors face a lower barrier to entry
Request for Feedback
Would maintainers be open to adopting part of this roadmap?
If so, I’m happy to help break this into smaller issues.
Chris
Summary
The Android app currently contains most of the core capture, metadata, and upload logic for KartaView, while the iOS app implements a smaller subset of these features. Improving the Android codebase presents an opportunity to also benefit the iOS app and create a more consistent experience and data pipeline across both platforms.
This issue proposes a prioritized roadmap focused on shared logic, modularization, and cross-platform alignment. The goal is to reduce duplication, improve maintainability, and ensure both apps produce high-quality, consistent data.
✅ Proposed Roadmap (Prioritized)
Phase 1 — Foundation (High Priority)
Migrate core Android logic fully to Kotlin
Modernize and simplify the codebase, making future modularization possible.
Modularize the Android project
Extract core modules such as:
core-models
core-metadata
core-upload
core-capture
This separates Android-specific code from portable business logic.
Document the capture + upload pipelines
Include metadata rules, GPS filtering, EXIF tags, queue logic, etc.
This helps align both platforms.
Extract shared metadata formats and constants
Unify EXIF tags, sequence metadata, timestamp rules, and ID formats.
Phase 2 — Shared Logic & Cross-Platform Alignment
Options include Kotlin Multiplatform, C++, or Rust.
Start with:
Data models
Metadata construction
Upload queue logic
GPS filtering
Android and iOS can both adopt this core.
Standardize the capture metadata specification
Define a consistent format for timestamps, orientation, GPS accuracy, frame indexing, etc.
Standardize upload API behavior
Use a shared OpenAPI schema or protobuf model to auto-generate client code for Android and iOS.
Phase 3 — Capture Pipeline Unification
Move frame-processing logic to shared native code
A single library for frame extraction, rotation correction, and metadata enrichment.
Implement missing iOS features using shared logic
iOS gains configurable capture interval, GPS smoothing, metadata enrichment, etc.
Add a shared test suite
Core logic becomes testable across platforms.
Phase 4 — Ecosystem Improvements
Automated APK releases via CI/CD
Keep GitHub releases current and reproducible.
Cross-platform “sequence validator” CLI tool
To check EXIF metadata, timestamps, GPS continuity, and detect anomalies.
Provide a formal “data quality” spec
Defines what constitutes a good or valid sequence on both platforms.
Phase 5 — Long-Term Enhancements
Consider migrating heavy processing to Rust or optimized C++
Shared, high-performance capture and metadata logic.
Harmonize UI/UX principles across Android and iOS
Add optional anonymous telemetry for debugging capture/upload problems
✅ Why This Helps Both Platforms
Android gains cleaner modular architecture
iOS gains missing features from shared logic
Server-side ingestion benefits from more consistent metadata
Future work becomes easier and faster
Community contributors face a lower barrier to entry
Request for Feedback
Would maintainers be open to adopting part of this roadmap?
If so, I’m happy to help break this into smaller issues.
Chris