App de simulación de trading de criptomonedas con fines académicos. Desarrollada con Kotlin Multiplatform, Jetpack Compose, Material 3, Ktor y Room.
Empieza con un balance de $10,000 y practica la compra/venta de monedas en un entorno sin riesgos reales.
UI disponible en modo claro y oscuro, con diseño moderno y responsivo.
- El proyecto demuestra arquitectura KMP moderna (Compose Multiplatform, MVVM, Koin, Room, Ktor).
- Prioriza código limpio, testing y escalabilidad multiplataforma.
- Ideal para aprender sobre mercados sin arriesgar dinero real.
- 📷 Capturas de pantalla
- ¿Qué es esta app?
- Características principales
- Cómo funciona (flujo básico)
- Stack tecnológico
- Arquitectura
- Estructura del proyecto
- Configuración y desarrollo local
Kind Money es una aplicación educativa de trading simulado donde puedes:
- 💰 Empezar con $10,000 de balance virtual
- 📈 Comprar y vender criptomonedas en tiempo real (datos de API)
- 📊 Ver tu portfolio con ganancias/pérdidas actualizadas
- 📜 Historial de transacciones completo
- 🎓 Aprender sin riesgos sobre mercados financieros
El objetivo es proporcionar un entorno seguro para experimentar con estrategias de trading sin consecuencias económicas reales.
- Compra/venta de múltiples criptomonedas
- Precios en tiempo real desde APIs públicas
- Cálculo automático de ganancias/pérdidas
- Balance actual y evolución histórica
- Listado de tenencias con valor actual
- Porcentaje de ganancia/pérdida por activo
- Lista de criptomonedas con precios actualizados
- Gráficos de tendencias (24h, 7d, 30d)
- Búsqueda y filtrado de monedas
- Room Database para almacenar transacciones
- DataStore para preferencias del usuario
- Datos offline-first con sincronización opcional
- Material 3 Design System
- Modo oscuro/claro automático
- Animaciones fluidas con Compose
- Responsive para tablets y móviles
- Inicio: La app te da $10,000 de balance inicial
- Explorar mercado: Revisa los precios actuales de diferentes criptomonedas
- Comprar monedas: Selecciona cantidad y confirma la compra
- Ver portfolio: Observa tu inversión en tiempo real
- Vender monedas: Cuando quieras, vende para obtener ganancias (o pérdidas)
- Historial: Consulta todas tus transacciones pasadas
💡 Todo es simulado: Ninguna transacción real se ejecuta. Es un entorno 100% seguro para practicar.
| Categoría | Tecnología | Versión |
|---|---|---|
| Lenguaje | Kotlin | 2.2.20 |
| Build System | Android Gradle Plugin | 8.13.0 |
| UI Framework | Compose Multiplatform | 1.9.0 |
| Target SDK | Android | 36 |
| Min SDK | Android | 24 |
| DI | Koin | 4.1.1 |
| Networking | Ktor Client | 3.3.0 |
| Database | Room | 2.8.1 |
| Images | Coil | 3.3.0 |
| Serialization | Kotlinx Serialization | 1.9.0 |
┌─────────────────────────────────────────────────┐
│ Presentation │
│ (Compose UI + ViewModels + Navigation) │
└────────────────┬────────────────────────────────┘
│
┌────────────────▼────────────────────────────────┐
│ Domain │
│ (Use Cases + Domain Models) │
└────────────────┬────────────────────────────────┘
│
┌────────────────▼────────────────────────────────┐
│ Data │
│ (Repositories + Room + Ktor + DataStore) │
└─────────────────────────────────────────────────┘
kindmoney/
├── composeApp/
│ ├── src/
│ │ ├── commonMain/
│ │ │ ├── kotlin/
│ │ │ │ ├── features/ # Features modulares
│ │ │ │ │ ├── coins/ # Feature: Lista y detalle de criptomonedas
│ │ │ │ │ │ ├── data/
│ │ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ │ ├── remote/ # API de precios
│ │ │ │ │ │ │ └── mapper/
│ │ │ │ │ │ ├── domain/
│ │ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── usecase/
│ │ │ │ │ │ │ └── repository/
│ │ │ │ │ │ └── presentation/
│ │ │ │ │ │ ├── list/ # Pantalla de mercado
│ │ │ │ │ │ ├── detail/ # Detalle de moneda
│ │ │ │ │ │ └── components/
│ │ │ │ │ │
│ │ │ │ │ ├── portfolio/ # Feature: Portfolio del usuario
│ │ │ │ │ │ ├── data/
│ │ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ │ └── local/ # Room entities y DAO
│ │ │ │ │ │ ├── domain/
│ │ │ │ │ │ │ ├── model/
│ │ │ │ │ │ │ ├── usecase/ # Calcular balance, ganancias/pérdidas
│ │ │ │ │ │ │ └── repository/
│ │ │ │ │ │ └── presentation/
│ │ │ │ │ │ ├── overview/ # Vista general del portfolio
│ │ │ │ │ │ ├── holdings/ # Lista de tenencias
│ │ │ │ │ │ └── components/
│ │ │ │ │ │
│ │ │ │ │ └── trade/ # Feature: Compra/Venta
│ │ │ │ │ ├── data/
│ │ │ │ │ │ ├── repository/
│ │ │ │ │ │ └── local/ # Transacciones en Room
│ │ │ │ │ ├── domain/
│ │ │ │ │ │ ├── model/
│ │ │ │ │ │ ├── usecase/ # ExecuteTrade, ValidateBalance
│ │ │ │ │ │ └── repository/
│ │ │ │ │ └── presentation/
│ │ │ │ │ ├── buy/ # Pantalla de compra
│ │ │ │ │ ├── sell/ # Pantalla de venta
│ │ │ │ │ ├── history/ # Historial de transacciones
│ │ │ │ │ └── components/
│ │ │ │ │
│ │ │ │ ├── core/ # Código compartido entre features
│ │ │ │ │ ├── database/
│ │ │ │ │ │ ├── KindMoneyDatabase.kt
│ │ │ │ │ │ └── DatabaseFactory.kt
│ │ │ │ │ ├── domain/
│ │ │ │ │ │ ├── Result.kt # Sealed class para manejo de estados
│ │ │ │ │ │ └── DataError.kt # Tipos de errores
│ │ │ │ │ ├── navigation/
│ │ │ │ │ │ ├── Navigator.kt
│ │ │ │ │ │ ├── Route.kt # Definición de rutas
│ │ │ │ │ │ └── NavGraph.kt
│ │ │ │ │ ├── network/
│ │ │ │ │ │ ├── HttpClientFactory.kt
│ │ │ │ │ │ └── NetworkMonitor.kt
│ │ │ │ │ └── util/
│ │ │ │ │ ├── CurrencyFormatter.kt
│ │ │ │ │ ├── DateTimeFormatter.kt
│ │ │ │ │ └── PercentageCalculator.kt
│ │ │ │ │
│ │ │ │ ├── theme/ # Tema visual
│ │ │ │ │ ├── Color.kt # Paleta de colores
│ │ │ │ │ ├── Theme.kt # Material 3 Theme
│ │ │ │ │ ├── Type.kt # Tipografía
│ │ │ │ │ └── Shape.kt # Formas personalizadas
│ │ │ │ │
│ │ │ │ └── di/ # Inyección de dependencias
│ │ │ │ └── Module.kt # Módulos de Koin
│ │ │ │
│ │ │ └── App.kt # Punto de entrada principal
│ │ │
│ │ ├── androidMain/ # Código Android específico
│ │ │ └── kotlin/
│ │ │ ├── MainActivity.kt
│ │ │ └── KindMoneyApp.kt
│ │ │
│ │ ├── iosMain/ # Código iOS específico (futuro)
│ │ │
│ │ └── commonTest/ # Tests compartidos
│ │ └── kotlin/
│ │ ├── features/
│ │ │ ├── coins/
│ │ │ ├── portfolio/
│ │ │ └── trade/
│ │ └── core/
│ │
│ └── build.gradle.kts
│
├── gradle/
│ └── libs.versions.toml # Catálogo de versiones
├── screenshots/ # Capturas para el README
└── README.md
Cada feature sigue Clean Architecture con tres capas independientes:
- Data: API client para obtener precios, mappers
- Domain: Modelos de monedas, use cases para filtrar/buscar
- Presentation: Pantallas de lista y detalle con ViewModels
- Data: Room DAO para holdings, cálculos de balance
- Domain: Lógica de ganancias/pérdidas, valoración actual
- Presentation: Dashboard del portfolio, lista de tenencias
- Data: Persistencia de transacciones en Room
- Domain: Validación de balance, ejecución de operaciones
- Presentation: Formularios de compra/venta, historial
- database: Configuración de Room Database y DAOs compartidos
- domain: Result types, error handling, modelos base
- navigation: Sistema de navegación con rutas type-safe
- network: Configuración de Ktor client y monitoreo de red
- util: Helpers para formateo de moneda, fechas y porcentajes
- theme: Material 3 theming (colores, tipografía, formas)
- di: Configuración de inyección de dependencias con Koin
- Android Studio Ladybug | 2024.2.1 o superior
- JDK 17 o superior
- Kotlin 2.2.20
- Android SDK 36 (compileSdk)
-
Clonar el repositorio
git clone https://github.com/clerodri/KindMoney.git cd kind-money -
Abrir en Android Studio
- File → Open → Selecciona la carpeta del proyecto
-
Sincronizar Gradle
- Android Studio sincronizará automáticamente
- Espera a que descargue todas las dependencias
-
Configurar API (opcional)
- Si usas una API de precios real, añade tu API key en
local.properties:CRYPTO_API_KEY=tu_api_key_aqui
- Si usas una API de precios real, añade tu API key en
-
Ejecutar la app
./gradlew :composeApp:installDebug
O usa el botón
▶️ Run en Android Studio
La base de datos se crea automáticamente en el primer inicio. Si necesitas limpiar datos:
# Android
./gradlew :composeApp:uninstallAllSi quieres usar este proyecto más allá de lo permitido (comercial, producción, etc.):
- Email: ronaldo_hm95@hotmail.es
- LinkedIn: Tu Perfil
¿Preguntas? contáctame directamente.





