Mobile Game

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.

Publicada en App Storev1.0.4 — iOS + Android

35+

Piezas únicas

8×8

Tablero

5

Modos de juego

15K+

Líneas de código

19

Funciones SQL

v1.0.4

Versión

Funcionalidades

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.

Tecnologías

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

react-native-gesture-handlerreact-native-reanimatedreact-native-google-mobile-ads@react-native-firebase/crashlytics@supabase/supabase-jsi18nextreact-i18nextexpo-linear-gradientexpo-apple-authenticationexpo-auth-sessionexpo-secure-storeexpo-avexpo-updatesexpo-localization
Diseño

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.

Ingeniería

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

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)
Resultados

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

Detalles

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

Base de Datos — 11 tablas

user_profilesuser_statsgame_completionsdaily_challengesdaily_completionsduelsdaily_rewardsweekly_scoressuspicious_activityevent_queueshadow_bans