App móvil multiplataforma (Android + iOS) para la gestión integral de un centro deportivo real.
Este repositorio forma parte de mi portafolio profesional y de mi TFG.
⚠️ Importante: la API REST de este proyecto está en otro repositorio (backend separado). Aquí se encuentra la app móvil (KMP + Android + iOS).
Este proyecto se divide en dos repositorios:
- Este repo (móvil): cliente multiplataforma con Kotlin Multiplatform.
- Repo API REST (backend): servicio HTTP consumido por la app.
🔗 Backend (añadir enlace):
https://github.com/<tu-usuario>/<tu-repo-api>
Si estás revisando este proyecto para selección técnica, te recomiendo evaluar ambos repos para ver el flujo end-to-end (cliente + servidor).
En este proyecto trabajé sobre una base Kotlin Multiplatform con foco en:
- Diseño de arquitectura escalable (Clean Architecture).
- Implementación de flujos críticos de producto (auth, perfil, reservas, favoritos, pagos).
- Integración de clientes HTTP y manejo robusto de sesión con refresh tokens.
- Colaboración entre apps nativas (Android/iOS) compartiendo lógica en
shared.
Si estás evaluando mi perfil para un puesto de Mobile Engineer (Android/KMP), este repositorio muestra cómo estructuro código mantenible y orientado a producto.
La app centraliza operaciones habituales de un centro deportivo:
- 🔐 Autenticación: login, registro, cambio/reset de contraseña y persistencia de sesión.
- 👤 Gestión de cuenta: perfil, foto, documentos y operaciones sobre usuario.
- 🏃 Área deportiva: reservas, productos/servicios y entrenador preferido.
- 💳 Wallet/Pagos: balance y transacciones de e-wallet (integraciones de pago presentes en Android).
Separación clara entre:
- Domain: entidades, casos de uso, contratos de repositorio.
- Data: implementaciones, data sources, DTOs, red/persistencia.
- Presentation: estado de UI + ViewModels + adaptación a plataforma.
Esto facilita pruebas, evolución del dominio y cambios tecnológicos sin romper la lógica de negocio.
- Lógica de negocio y networking en
shared/src/commonMain. - Adaptaciones nativas en
androidMaineiosMain. - UIs nativas: Jetpack Compose en Android y SwiftUI en iOS.
- Persistencia de tokens/usuario en almacenamiento local.
- Renovación de sesión con
refresh tokendesde cliente HTTP. - Mecanismos de limpieza de credenciales y logout.
Documentación técnica ampliada de auth: docs/AUTH_MODULE_ARCHITECTURE.md.
.
├── androidApp/ # App Android (Jetpack Compose)
├── iosApp/ # App iOS (SwiftUI)
├── shared/ # Módulo compartido KMP
│ └── src/
│ ├── commonMain/
│ ├── androidMain/
│ └── iosMain/
└── docs/ # Documentación técnica
Flujo funcional de alto nivel:
UI Event → ViewModel → UseCase → Repository → Remote/Local DataSource
↑ ↓
└────────────────────── UI State Update ───────────────┘
- Kotlin Multiplatform
- Kotlin Coroutines
- Ktor Client
- Kotlinx Serialization
- Koin (DI)
- DataStore
- Jetpack Compose
- Navigation Compose
- WorkManager
- Integraciones de pago (Stripe / Google Pay)
- SwiftUI
- Integración con framework generado desde módulo KMP
Este proyecto evidencia experiencia práctica en:
- Arquitectura de software móvil para proyectos reales.
- Diseño de código compartido entre plataformas sin sacrificar UX nativa.
- Gestión de estado y ciclo de vida con ViewModels/casos de uso.
- Consumo de APIs seguras con manejo de autenticación y refresh.
- Organización de repositorio y documentación técnica para equipos.
Como la API vive en otro repositorio, debes levantar el backend y apuntar la app a esa URL base (entorno local o staging).
- JDK 17
- Android Studio (Android)
- Xcode (iOS)
./gradlew :shared:build./gradlew :androidApp:assembleDebug./gradlew :shared:allTests- Arquitectura de autenticación:
docs/AUTH_MODULE_ARCHITECTURE.md
Si quieres conocer más sobre decisiones de arquitectura o mi contribución en el desarrollo, puedes escribirme por LinkedIn o revisar el resto de proyectos de mi portafolio.
⭐ Si te aporta valor este repositorio, una estrella ayuda mucho.