← Volver a Mis Proyectos

El Piedrero (v1.0.1)

Android Kotlin JetpackCompose CleanArchitecture SocketsTCP AES-256-GCM DevSecOps WCAG-AAA OpenSource
📢 Nota informativa: Versión oficial estable (v1.0.1) para Android, totalmente operativa de forma offline en red local sin servidores ni Internet. El desarrollo continúa activo (ver hoja de ruta).
Ver en GitHub Releases Descargar APK (v1.0.1)
💡

¿De dónde sale el nombre «El Piedrero»?

El nombre proviene de la jerga tradicional de la Ronda: en la mesa, los puntos no se anotan en papel, sino que se contabilizan apilando piedras físicas (o judías). Al encargado oficial de custodiar el tanteo, sumar las malas, pasar a buenas y cantar la victoria se le llama coloquialmente el piedrero. La app nace para actuar como ese «piedrero digital» de apoyo.

🎮 Demo Interactiva en Vivo

Vista Previa: ¿Cómo se juega con El Piedrero?

🔊 Audio Real Activo

Experimenta en tiempo real la interfaz reactiva desarrollada en Jetpack Compose (Material 3): selecciona para qué equipo cantar, pulsa sobre cualquiera de las jugadas tradicionales para sumar piedras y escuchar la locución folclórica original, o simula el paso a ¡Buenas! y la victoria al alcanzar las 21 piedras.

🃏
El Piedrero
Partida Local · Mesa Central
21 PIEDRAS
🎲 Haz clic en cualquier jugada para cantar y sumar piedras
Equipo A Malas (0/11)
0
Piedras / 21
Equipo B Malas (0/11)
0
Piedras / 21
Cantar jugada para:
🪨 11 Malas: Inicio de tanteo 🌟 10 Buenas: A partir de la 11ª piedra 🏆 21 Piedras: Fin de partida

Arquitectura del Sistema: MVI Reactivo & Red Sockets TCP Offline

Estructura desacoplada bajo Clean Architecture combinando interfaz declarativa reactiva con un protocolo de comunicación en red local de baja latencia:

1. UI Accesible WCAG AAA

Jetpack Compose Material 3

Touch targets estrictos de 48×48 dp, contrastes >10:1 para visión solar, soporte TalkBack y bloqueo vertical.

2. Red Segura E2E & Anti-Replay

Sockets TCP & AES-256-GCM

Contador monotónico contra reinyección, expiración <60s, resiliencia P2P ante microcortes y emparejamiento por QR.

3. Rendimiento & Audio Focus

Zero-Disk-IO & Ducking

Gestión nativa de AudioFocus con atenuación suave, música folclórica CC0, purga de caché y búferes a 60 FPS.

4. DevSecOps & Suite CI/CD

R8 (8.2 MB) & GitHub Actions

Variables de entorno seguras, ofuscación R8, HostGameUseCaseTest, lintVitalRelease y firma Release oficial.

S

Situación

Todas las tardes dedico horas a compartir partidas de la tradicional Ronda con mi abuelo. Durante la intensidad de las rondas, los cantos simultáneos y los lances del juego, con frecuencia surgían confusiones en el recuento exacto de piedras y judías sobre la mesa. Existía la necesidad de disponer de una herramienta tecnológica de consulta inmediata que actuase como soporte y juez secundario, sin alterar en ningún momento la valiosa tradición física de jugar con las piezas reales.

T

Tarea

El desafío planteado fue bidireccional y de alta exigencia:

1. Usabilidad y Sincronización Offline: Diseñar una aplicación móvil Android nativa, completamente accesible para personas mayores, 100% offline (sin dependencia de cobertura móvil ni servidores externos) y capaz de sincronizar el marcador en tiempo real entre múltiples dispositivos alrededor del tablero.

2. Eficiencia de Ingeniería Asistida por IA: Demostrar cómo, empleando herramientas de Inteligencia Artificial guiadas por un riguroso criterio de arquitectura de software, es viable concebir, programar, blindar y empaquetar un MVP v1.0 plenamente operativo en menos de 24 horas, sentando bases sólidas para su evolución continua.

A

Acción

Para materializar el proyecto bajo estándares profesionales de ingeniería de software, desarrollé los siguientes módulos técnicos:

1. Arquitectura Limpia & Accesibilidad Universal (WCAG 2.1 AA/AAA): Construcción nativa en Kotlin y Jetpack Compose (Material 3) bajo patrones Clean Architecture y MVI/MVVM reactivo con StateFlow. Todos los controles interactivos están normalizados a un mínimo estricto de 48×48 dp, con ratios de contraste superiores a 10:1 para visibilidad solar y descripciones TalkBack en español.

2. Sincronización Local, Cifrado AES-256-GCM & Anti-Replay: Servidor/cliente ligero sobre Sockets TCP en red de área local con cifrado simétrico extremo a extremo. Incorpora protección anti-replay con contadores monotónicos de secuencia (sequenceNumber), ventana de expiración temporal (<60s) y resiliencia P2P para recuperar asientos tras microcortes de red.

3. Audio Focus, Zero-Disk-IO y Música Tradicional CC0: Streaming directo de descriptores de assets sin copias a disco flash, integración de AudioFocusRequest con ducking automático para atenuar música ambiental y sustitución de piezas sonoras por composiciones folclóricas canarias de dominio público debidamente atribuidas.

4. Blindaje DevSecOps & Reducción R8 (8.2 MB): Eliminación de credenciales hardcodeadas en gradle gestionándolas por variables de entorno en CI/CD. Activación de optimización y ofuscación R8 (reducción de tamaño a 8.2 MB) con políticas de red sin tráfico en claro y parada limpia en ViewModel.onCleared().

5. Reglas Tradicionales, Transparencia Legal & Diálogos In-App: Soporte dinámico para partidas de 2, 3 y 4 jugadores (con regla de suplente temporal en tríos), historial rotativo persistente de 30 partidas y diálogos in-app de Licencias Open Source y Política de Privacidad 100% offline (cero recolección de telemetría).

6. Calidad de Software & Pipeline CI/CD: Baterías de pruebas unitarias sobre reglas y casos de uso (HostGameUseCaseTest.kt, RondaCipherTest.kt), con análisis lintVitalRelease y compilación automatizada de APK y Android App Bundle (AAB) en GitHub Actions.

R

Resultado

• Entrega Récord en <24 Horas: Concepción, desarrollo, testeo y empaquetado del MVP v1.0 completados en una única jornada gracias a la supervisión estratégica de herramientas de IA aplicada con rigor ingenieril.

• Impacto Real Inmediato: La aplicación es utilizada a diario en las partidas de las tardes con mi abuelo como juez de apoyo infalible, eliminando discusiones sobre el recuento de piedras malas y buenas y preservando intacta la diversión del juego presencial.

• Publicación Open Source & Binario Release Oficial: Código fuente liberado abiertamente en GitHub bajo Licencia MIT, con binario APK compilado en modo Release oficial firmado con certificado propio de DevNaranjo (compatibilidad universal garantizada en Xiaomi, MIUI y HyperOS), documentación bilingüe (ES/EN) y directrices de contribución comunitaria.

⚡ Aspectos Destacados de Ingeniería Móvil (v1.0.1)

🔒

AES-256 & Anti-Replay

Criptografía simétrica E2E por QR, contador de secuencia contra ataques de reinyección y candado 🔒 de equipo rival en red.

WCAG 2.1 AA / AAA & Fuentes

Selector de tamaño de texto dinámico (Normal, Grande +12%, Extra +25%), touch targets ≥48×48 dp y contrastes >10:1.

📦

DevSecOps & R8 (8.2 MB)

Ofuscación R8, reducción de peso del 40%, credenciales por variables de entorno y verificación criptográfica SHA-256.

🎧

Prioridad Sonora & Folklore

Cola de audio blindada sin cancelaciones entre ¡Buenas! y ¡Últimas!, streaming Zero-Disk-IO y música canaria CC0.

🗺️ Estado y Hoja de Ruta del Proyecto

Planificación de versiones y evolución multiplataforma para El Piedrero.

Fase MVP: Prototipo Funcional Inicial Completada

Concepción y desarrollo del primer prototipo funcional en ~24 horas asistido por IA el 01/09/2026. Estableció los cimientos del marcador nativo Android en Kotlin y Jetpack Compose (Material 3) bajo patrón reactivo MVI: soporte para mesa local (1 dispositivo), sincronización multijugador preliminar por Sockets TCP en red local con emparejamiento rápido mediante código QR (CameraX / ZXing), registro de cantos tradicionales con audios folclóricos y guardado local de las últimas 30 partidas.

Versión Oficial 1.0 / 1.0.1 (Estable) Lanzamiento Oficial

Consolidación y endurecimiento de la aplicación a nivel de producción tras sucesivas iteraciones de optimización y parches de estabilidad y accesibilidad (v1.0.1):

  • Seguridad Criptográfica LAN: Cifrado de extremo a extremo AES-256-GCM en sockets TCP, validación autoritaria del Host, protección anti-replay y candado 🔒 estricto para bloquear la edición de piedras del equipo rival en red local.
  • Control de Reparto & Sincronización: Diálogo y recuento de 4 cartas iniciales («Cartas a la Mesa») exclusivo para el jugador repartidor en partidas multijugador, evitando confusiones en los terminales de los compañeros.
  • Modo TV Cast: Transmisión de pantalla en tiempo real a Smart TVs y proyectores (TvCastDialog) para torneos y tabernas.
  • Banda Sonora IA & Prioridad Sonora: 6 temas instrumentales folclóricos canarios generados por IA libres de SGAE (CC0), streaming Zero-Disk-IO y cola de audio blindada sin cancelaciones entre los avisos de ¡Buenas! y ¡Últimas!.
  • Accesibilidad Universal (WCAG 2.1 AA/AAA): Touch targets de 48×48 dp, selector dinámico de tamaño de fuente en ajustes (Normal, Grande +12%, Extra +25%) con persistencia local, contrastes reforzados >10:1 y soporte TalkBack en español.
  • Resiliencia & Botón Deshacer: Función para deshacer la última jugada directamente desde la ventana de victoria (restaurando tanteo, ganador e historial), gestión singleTask, desvinculación limpia de cámara (unbindAll), servicio AppCleanupService y recuento estricto de 40 cartas.
  • DevSecOps & Distribución: Compilación optimizada con R8 (8.2 MB), firma Release oficial (MIUI/HyperOS), verificación criptográfica SHA-256 y descarga directa del binario El_Piedrero_v1.0.1.apk con historial en GitHub Releases.

Versión 1.1: Refactorización Visual & UX En Planificación

Actualización enfocada en optimizar y pulir la interfaz gráfica del marcador: animaciones más fluidas en la transición de piedras malas a buenas, mejoras de accesibilidad táctil para personas mayores, microinteracciones hápticas avanzadas y personalización de temas y avatares de equipo.

Futura Expansión: Compatibilidad para iOS Próximamente

Investigación y desarrollo para portar la aplicación al ecosistema de Apple mediante Compose Multiplatform o Kotlin Multiplatform (KMP), permitiendo que usuarios de iPhone y iPad puedan unirse a la misma mesa de juego en red local compartiendo la sincronización de piedras por Sockets TCP.