Skip to content

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.

Notifications You must be signed in to change notification settings

clerodri/KindMoney

Repository files navigation

Kind Money (Kotlin Multiplatform · Compose)

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.

Índice


📷 Capturas de pantalla

Home Screen Coins Screen Coins Screen Sell Coins Canvas Buy Coins


¿Qué es esta app?

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.


Características principales

🪙 Trading Simulado

  • Compra/venta de múltiples criptomonedas
  • Precios en tiempo real desde APIs públicas
  • Cálculo automático de ganancias/pérdidas

💼 Portfolio Management

  • Balance actual y evolución histórica
  • Listado de tenencias con valor actual
  • Porcentaje de ganancia/pérdida por activo

📊 Market Overview

  • Lista de criptomonedas con precios actualizados
  • Gráficos de tendencias (24h, 7d, 30d)
  • Búsqueda y filtrado de monedas

🔒 Persistencia Local

  • Room Database para almacenar transacciones
  • DataStore para preferencias del usuario
  • Datos offline-first con sincronización opcional

🎨 Diseño Moderno

  • Material 3 Design System
  • Modo oscuro/claro automático
  • Animaciones fluidas con Compose
  • Responsive para tablets y móviles

Cómo funciona (flujo básico)

  1. Inicio: La app te da $10,000 de balance inicial
  2. Explorar mercado: Revisa los precios actuales de diferentes criptomonedas
  3. Comprar monedas: Selecciona cantidad y confirma la compra
  4. Ver portfolio: Observa tu inversión en tiempo real
  5. Vender monedas: Cuando quieras, vende para obtener ganancias (o pérdidas)
  6. Historial: Consulta todas tus transacciones pasadas

💡 Todo es simulado: Ninguna transacción real se ejecuta. Es un entorno 100% seguro para practicar.


Stack tecnológico

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

Arquitectura

Patrón MVVM + Clean Architecture

┌─────────────────────────────────────────────────┐
│                  Presentation                   │
│  (Compose UI + ViewModels + Navigation)         │
└────────────────┬────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────┐
│                   Domain                        │
│        (Use Cases + Domain Models)              │
└────────────────┬────────────────────────────────┘
                 │
┌────────────────▼────────────────────────────────┐
│                    Data                         │
│  (Repositories + Room + Ktor + DataStore)       │
└─────────────────────────────────────────────────┘

Estructura del proyecto

Arquitectura por features (Clean Architecture)

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

Organización por features

Cada feature sigue Clean Architecture con tres capas independientes:

📊 Feature: Coins (Mercado de criptomonedas)

  • Data: API client para obtener precios, mappers
  • Domain: Modelos de monedas, use cases para filtrar/buscar
  • Presentation: Pantallas de lista y detalle con ViewModels

💼 Feature: Portfolio (Gestión de cartera)

  • 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

💱 Feature: Trade (Compra y venta)

  • Data: Persistencia de transacciones en Room
  • Domain: Validación de balance, ejecución de operaciones
  • Presentation: Formularios de compra/venta, historial

Módulos Core

  • 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

Módulos transversales

  • theme: Material 3 theming (colores, tipografía, formas)
  • di: Configuración de inyección de dependencias con Koin

Configuración y desarrollo local

Requisitos previos

  • Android Studio Ladybug | 2024.2.1 o superior
  • JDK 17 o superior
  • Kotlin 2.2.20
  • Android SDK 36 (compileSdk)

Pasos de instalación

  1. Clonar el repositorio

    git clone https://github.com/clerodri/KindMoney.git
    cd kind-money
  2. Abrir en Android Studio

    • File → Open → Selecciona la carpeta del proyecto
  3. Sincronizar Gradle

    • Android Studio sincronizará automáticamente
    • Espera a que descargue todas las dependencias
  4. 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
  5. Ejecutar la app

    ./gradlew :composeApp:installDebug

    O usa el botón ▶️ Run en Android Studio

Configuración de Room

La base de datos se crea automáticamente en el primer inicio. Si necesitas limpiar datos:

# Android
./gradlew :composeApp:uninstallAll

Contacto para licencias comerciales

Si quieres usar este proyecto más allá de lo permitido (comercial, producción, etc.):

¿Preguntas? contáctame directamente.

About

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.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published