Block Puzzle Play
Juego de rompecabezas de bloques con tablero 8×8, drag & drop nativo a 60 FPS, duelos asincrónicos 1v1, desafíos diarios con ranking global, power-ups estratégicos y sistema de progresión completo. Arquitectura offline-first con Event Sourcing.
35+
Piezas únicas
8×8
Tablero
5
Modos de juego
15K+
Líneas de código
19
Funciones SQL
v1.0.4
Versión
Características principales
Core Gameplay
Tablero 8×8 con Drag & Drop
Grid responsive con gestos nativos y ghost preview en tiempo real que muestra dónde caerá la pieza antes de soltarla.
35+ Piezas Únicas
Líneas (2-5 celdas), cuadrados, formas L, T, S, Z, corners y cruz. Múltiples rotaciones, clasificadas por dificultad.
Motor de Juego Completo
Detección de líneas completas, game over con early exit optimization, recarga de piezas (3 nuevas al colocar las 3).
Combos y Multiplicadores
Scoring que premia limpiar múltiples líneas (x1 a x4) y mantener combos consecutivos (hasta +50% bonus).
Modos de Juego
Clásico
Sin límite de tiempo. Maximizar puntuación hasta que no queden movimientos posibles.
Contrarreloj
Tres variantes (60s, 90s, 120s). Mayor puntuación antes de que se acabe el tiempo.
Zen
Modo relajado sin presión de tiempo. Experiencia meditativa (feature premium).
Desafío Diario
Mismas piezas para todos (seed determinístico). Ranking global y entre amigos. 1 intento por día.
Social y Duelos
Duelos Asincrónicos 1v1
Desafíos entre amigos con mismo seed para equidad. Comparación de resultados lado a lado.
Sistema de Amigos
Friend codes únicos, lista con estado online, rankings semanales entre amigos.
Compartir Resultados
Imagen generada con score, líneas, combo máximo y racha para redes sociales.
Power-ups y Progresión
Power-ups Estratégicos
Bomba (elimina área), Undo (devuelve última pieza), Ghost Preview (posición óptima 3s).
Economía Completa
Monedas (score/10), XP variable por modo, rachas diarias con streak shields, logros desbloqueables.
Monetización
AdMob
Banner en Home, interstitial cada 3 partidas (cooldown 1 min), rewarded para power-ups, monedas y continue.
Suscripción Premium
$1.99/mes o $9.99/año: sin ads, x2 monedas, modo Zen, temas exclusivos, streak shields, stats avanzadas.
Stack Tecnológico
Frontend / Mobile
React Native 0.81
New Architecture (JSI/Fabric)
Expo SDK 54
Build, deploy, OTA updates
TypeScript 5.9 + React 19
Tipado estático, hooks
Zustand 5
7 stores: game, auth, user, theme, premium, friend, duel
Reanimated 4.1
Animaciones en hilo nativo para drag & drop
Backend
Supabase
Auth, DB, Realtime, 3 Edge Functions
PostgreSQL
Schema blockpuzzle, 11 tablas, 19 funciones SQL
Vistas públicas (bp_*)
5 vistas como capa de abstracción segura
Row Level Security
Políticas por tabla, schema no expuesto
Servicios
Google AdMob
Banner, interstitial, rewarded
Firebase Crashlytics
Crash reporting en producción
EAS Build + Update
Cloud builds y OTA por canales
Local
AsyncStorage + Zustand Persist
Partida, settings, cola de sync
expo-secure-store
Tokens cifrados (Keychain/EncryptedSharedPrefs)
Librerías principales
Decisiones de Arquitectura
Schema Aislado con Vistas Públicas
Schema blockpuzzle no expuesto al cliente. 5 vistas bp_* como abstracción + funciones RPC wrapper. Permite cambiar estructura interna sin afectar frontend.
Event Sourcing Offline
Acciones registradas como eventos locales, procesadas para UI instantánea, encoladas para sync con retry exponential backoff. Server wins en conflictos.
Zero I/O durante Gameplay
Estado completo en Zustand (memoria). Autoguardado cada 10s en background sin bloquear UI. 60 FPS garantizados.
Reanimated para Drag & Drop
Shared values en hilo nativo de UI, runOnJS solo para lógica de negocio. Ghost preview sin re-render del tablero.
Responsive con Cap para Tablets
Funciones wp/hp/fs basadas en iPhone 13 mini (375×812). Ancho capeado a 500px en tablets para evitar scaling x2.
Seed Determinístico
Daily challenges y duelos generan piezas con PRNG seedeado: hash(date + "blockpuzzle"). Validación server-side del seed.
Local-First con Login Opcional
Juego completo sin cuenta. Al hacer login, datos locales se sincronizan con Supabase. Maximiza retención eliminando fricción.
Desafíos Técnicos
Drag & Drop a 60 FPS
Problema: Cada movimiento del dedo triggereaba re-renders en cascada, recalculando ghost preview y estado global.
Solución: Separación de posición visual (shared values Reanimated, hilo nativo) de lógica de negocio (runOnJS). Refs para comparaciones internas.
→ 60 FPS constantes incluso en gama baja.
Responsive Cross-Device
Problema: En iPads todo escalaba x2 porque las funciones usaban ancho real (768-1024px) vs base 375px.
Solución: Sistema centralizado responsive.ts con wp/hp/fs que capea ancho a 500px en tablets. 12+ pantallas migradas.
→ UI consistente desde iPhone SE hasta iPad Pro.
Sincronización Offline
Problema: Partidas, monedas y estadísticas deben sincronizarse sin perder datos después de jugar sin conexión.
Solución: Event Sourcing con cola en AsyncStorage, retry exponential backoff, server-wins para conflictos.
→ Cero pérdida de datos, sync transparente.
Game Over Detection Eficiente
Problema: Verificar si alguna pieza cabe en alguna posición: potencialmente 3 × 64 × N bloques.
Solución: Early exit al encontrar primera posición válida. Cache de posiciones ocupadas.
→ Detección en <50ms, imperceptible al usuario.
Aprobación App Store (Primera Vez)
Problema: Privacy templates, data safety, AdMob, Crashlytics, OAuth, compliance de Apple.
Solución: Abordaje sistemático: declaración de cada dato, bundle IDs correctos, app-ads.txt, clasificación de edad.
→ Aprobada por Apple en la primera revisión.
Estado del Proyecto
Completado
- Backend Supabase: 11 tablas, 19 funciones SQL, RLS, 3 Edge Functions
- Motor de juego: boardEngine, pieceGenerator, scoreCalculator
- 12+ pantallas, 14+ componentes de gameplay
- Auth: Google OAuth + Apple Sign-In
- AdMob (3 tipos), Crashlytics, i18n (ES/EN)
- 7 Zustand stores, 4 temas visuales
- Responsive para phones y tablets
- Publicada en iOS App Store
Pendiente
- Daily Challenge integración completa en frontend
- UI de resultado comparativo en duelos
- Leaderboards y achievements funcionales
- Publicación final en Google Play (producción)
- Notificaciones push
- Animaciones de limpieza de líneas (polish)
Logros Destacados
Publicado en App Store — aprobado por Apple en primera revisión
Arquitectura full-stack end-to-end: motor de juego, UI, PostgreSQL con RLS, Edge Functions, auth
Cross-platform con 100% código compartido: React Native + Expo para iOS y Android
Duelos asincrónicos con seed determinístico — único en el mercado de block puzzles
Offline-first con Event Sourcing y sincronización transparente
Monetización dual: AdMob (3 tipos con rate limiting) + suscripción premium con IAP
Responsive desde iPhone SE hasta iPad Pro con sistema de escalado centralizado
60 FPS constantes con Reanimated en hilo nativo durante drag & drop
Seguridad robusta: RLS, schema no expuesto, tokens cifrados, anti-cheat con shadow bans
Información adicional
Idiomas
Español + Inglés
Temas
Dark, Light, OLED, Sepia
Modos
Clásico, Timed, Zen, Daily, Duels
Arquitectura
Local-first, login opcional
Paleta Arcade — Tipos de Piezas
Líneas
Cuadrados
Formas L
Formas T
Formas S
Formas Z
Corners
Cruz