← Volver a Mis Proyectos

El Piedrero (v1.1-Beta.2)

Android Kotlin JetpackCompose CleanArchitecture SocketsTCP AES-256-GCM DevSecOps WCAG-AAA OpenSource
📢 Nota informativa: La aplicación cuenta con acceso a la versión pre-lanzamiento v1.1-Beta.2 para pruebas, manteniendo simultáneamente la descarga del binario oficial estable v1.0.3. Todas las novedades de la v1.1 ya pueden explorarse en la galería interactiva y en la hoja de ruta.
💡

¿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?

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, 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.3 Estable · v1.1-Beta.2)

🔒

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 (22.9 MB)

Ofuscación R8, suite BGM folclórica, credenciales seguras y verificación criptográfica SHA-256 del APK oficial.

🎧

Streaming Kernel & Folklore

Reproductor blindado anti-crash, lectura por FileDescriptor con búfer 2-4s (TV Cast) 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 Estable (v1.0.0 → v1.0.3) 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 sonora, streaming de baja latencia y sincronización multijugador (v1.0.3):

  • 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.
  • Sincronización Multijugador & Pantalla de Espera: Diálogo inicial de 4 cartas exclusivo para el repartidor, pantalla de espera interactiva en los terminales conectados durante el recuento con barra de progreso, descarte automático y recordatorio de reparto calibrable (30s por defecto, configurable de 15s a 90s o desactivable desde Accesibilidad).
  • Bonificación de Bufos en Cantos: Botón contextual dinámico «De bufos» (+1 en Ronda/Parranda; +2 en Caracol/Caracolillo) con vigencia estricta durante el reparto en curso.
  • Resiliencia Acústica & Audio Nativo: Erradicación total de cierres inesperados al finalizar pistas ambientales BGM mediante callbacks nativos del sistema atómicos y thread-safe (blindaje de llamadas a MediaPlayer); streaming Zero-Disk-IO y cola de audio blindada sin cancelaciones entre los avisos de ¡Buenas! y ¡Últimas!.
  • Modo TV Cast & Streaming por Kernel Linux: Transmisión de pantalla en tiempo real (TvCastDialog) con desacoplamiento de audio de la JVM mediante FileDescriptor y búfer elástico de 2 a 4 segundos, previniendo microcortes por pausas del Garbage Collector o codificación de pantalla en Miracast y saturación en AudioFlinger de Smart TVs.
  • Accesibilidad Universal (WCAG 2.1 AA/AAA): Touch targets de 48×48 dp, selector dinámico de tamaño de fuente (Normal, Grande +12%, Extra +25%) con protección adaptativa en dos líneas 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) y servicio AppCleanupService.
  • DevSecOps & Distribución: Compilación optimizada con R8 (22.9 MB con suite sonora completa), firma Release oficial (MIUI/HyperOS), verificación criptográfica SHA-256 (CF5C09...) y descarga directa del binario El_Piedrero_v1.0.3.apk con historial en GitHub Releases.

Versión 1.1: Refactorización Visual & UX (v1.1-Beta.2) En Desarrollo (Beta)

Actualización en fase activa de desarrollo y pruebas pre-lanzamiento que consolida la nueva experiencia visual y ergonómica de la aplicación:

  • Selector de Modalidades Directo: Pantalla inicial intuitiva con acceso inmediato a Partida Local (un teléfono en el centro de la mesa) o Partida Multijugador (red local por Sockets TCP y código QR).
  • Configuración Flexible de Mesa (2 a 8 Jugadores): Configuración interactiva de la mesa (1v1 mano a mano, 3 en trío, 4 en parejas 2x2, 6 en 3x2 u 8 en 4x2) y personalización completa de los nombres de los participantes.
  • Asistente Táctil de Primer Reparto: Pantalla «Cartas a la Mesa» para contabilizar rápidamente cartas tradicionales repartidas (+1 a +4 piedras) e interruptor de validación reglamentaria «¿Bien dada?».
  • Marcador Reactivo MVI: Rediseño visual del tanteo de Malas a Buenas (21 piedras) con transiciones suaves y botonera para los cantos folclóricos canarios.
  • Trazabilidad y Botón Deshacer Inmediato: Registro cronológico detallado de jugadas con reversión instantánea de anotaciones involuntarias.
  • Pantalla de Victoria y Head-to-Head: Modal de proclamación del ganador a las 10 Buenas (21 piedras) con marcador acumulado entre contrincantes.
  • Tema Oscuro Integral (Material 3): Soporte de alto contraste especialmente calibrado para partidas nocturnas y máxima eficiencia energética en pantallas OLED/AMOLED.
  • Distribución Anticipada del APK (v1.1-Beta.2): Acceso de prueba directa al binario compilado El_Piedrero_v1.1-Beta.2.apk disponible a través de GitHub Releases para testeo de nuevas características previo al lanzamiento general.

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.