
GUILTY
Producto propio de Forza: una suite de juegos de fiesta multijugador en tiempo real, en móvil y web.
La idea detrás de nuestro propio producto: qué explora y por qué lo construimos.
El proyecto
Guilty es un producto propio de Forza: una suite de juegos de fiesta para jugar en grupo. Reúne ocho juegos —verdad o reto, yo nunca, ¿qué prefieres?, el más probable, tipsy, torre, mixto y un impostor de deducción social— en una app de iOS y Android (Flutter) y en web, con partidas multijugador en vivo de 2 a 12 jugadores y soporte en español e inglés. Lo construimos para explorar el multijugador en tiempo real cross-platform de punta a punta: estado sincronizado por WebSocket, salas que también funcionan sin internet, y un modelo freemium con compras in-app y Stripe. Está vivo en guilty.mx, en la App Store y en Google Play.
Lo que venían a resolver, contado sin tecnicismos.
Reto
- 01Sincronizar partidas en tiempo real entre muchos jugadores, sin que se desincronice el estado.
- 02Un mismo producto en iOS, Android y web, con la misma lógica de juego.
- 03Que las salas funcionen también sin internet (modo local / LAN).
- 04Ocho juegos distintos compartiendo un mismo motor de partidas.
Las piezas que hacen funcionar el producto.
Lo que construimos
Multijugador en vivo
Un jugador abre una sala, los demás entran con un código y juegan en vivo: turnos, votaciones y fases se sincronizan al instante entre todos. El backend corre sobre Cloudflare Durable Objects con WebSocket, y si no hay internet el host levanta una sala local (LAN) sin servidor.
- Salas con código de invitación
- Turnos y votaciones sincronizados
- Vista de anfitrión y de jugador
- Fallback a sala local sin internet (LAN)
Suite de 8 juegos
Verdad o reto, yo nunca, ¿qué prefieres?, el más probable, tipsy, torre, mixto y un impostor de deducción social (estilo Among Us). Todos comparten un mismo motor de partidas, con modos chill y guilty.
- 8 juegos sobre un motor común
- Impostor de deducción social
- Modos chill y guilty
- Contenido editable desde una herramienta interna
Móvil y web, un mismo producto
App nativa en iOS y Android con Flutter (publicada en las tiendas) y versión web con React Router 7, compartiendo la misma lógica de juego y el mismo backend. El jugador entra desde donde sea y juega con todos.
- iOS y Android (Flutter, en tiendas)
- Web con React Router 7
- Mismo backend para todas las plataformas
- Español e inglés
Freemium en las tiendas
Modelo freemium completo: modo chill gratis y modo guilty premium por suscripción. Compras in-app en iOS y Android y pagos con Stripe en web, con el estado de la suscripción sincronizado entre plataformas.
- Compras in-app (iOS / Android)
- Pagos con Stripe en web
- Suscripción sincronizada entre plataformas
- Prueba gratuita y modo chill sin costo
Cómo construimos el producto, paso a paso.
Proceso
- 01
Concepto
Definimos el producto: qué juegos, cómo se juega en grupo y qué hace especial al multijugador en vivo. Un experimento propio para empujar el real-time cross-platform.
- Definición de juegos y modos
- Modelo de partidas y salas
- 02
Arquitectura
App Flutter (clean architecture + BLoC) para móvil y un backend en tiempo real con React Router 7 sobre Cloudflare Durable Objects y WebSocket, con Prisma/PostgreSQL para los datos.
- App Flutter + backend en tiempo real
- Protocolo de sincronización
- 03
Motor de juegos
Cada juego como una máquina de estados (fases, turnos, votaciones) sobre un motor común, para sumar juegos sin reescribir la lógica de partida.
- Motor común de partidas
- 8 juegos implementados
- 04
Multijugador
Salas en vivo por WebSocket sobre Durable Objects, con vista de anfitrión y de jugador, y un fallback a sala local (LAN) cuando no hay internet.
- Salas online sincronizadas
- Modo local sin internet
- 05
Lanzamiento
Publicación en App Store y Google Play, web en vivo en guilty.mx, y el modelo freemium con compras in-app y Stripe activo en todas las plataformas.
- iOS, Android y guilty.mx en vivo
- Freemium activo (IAP + Stripe)
- 01
Concepto
Definimos el producto: qué juegos, cómo se juega en grupo y qué hace especial al multijugador en vivo. Un experimento propio para empujar el real-time cross-platform.
- Definición de juegos y modos
- Modelo de partidas y salas
- 02
Arquitectura
App Flutter (clean architecture + BLoC) para móvil y un backend en tiempo real con React Router 7 sobre Cloudflare Durable Objects y WebSocket, con Prisma/PostgreSQL para los datos.
- App Flutter + backend en tiempo real
- Protocolo de sincronización
- 03
Motor de juegos
Cada juego como una máquina de estados (fases, turnos, votaciones) sobre un motor común, para sumar juegos sin reescribir la lógica de partida.
- Motor común de partidas
- 8 juegos implementados
- 04
Multijugador
Salas en vivo por WebSocket sobre Durable Objects, con vista de anfitrión y de jugador, y un fallback a sala local (LAN) cuando no hay internet.
- Salas online sincronizadas
- Modo local sin internet
- 05
Lanzamiento
Publicación en App Store y Google Play, web en vivo en guilty.mx, y el modelo freemium con compras in-app y Stripe activo en todas las plataformas.
- iOS, Android y guilty.mx en vivo
- Freemium activo (IAP + Stripe)
El producto en números.
En números
Verdad o reto, yo nunca, ¿qué prefieres?, el más probable, tipsy, torre, mixto e impostor — todos sobre el mismo motor.
App nativa en las dos tiendas (Flutter) y versión web (React Router 7), con el mismo backend.
De 2 a 12 jugadores en una misma partida en tiempo real, con fallback a sala local sin internet.
El anfitrión levanta una sala por LAN y los jugadores entran sin conexión — la fiesta sigue aunque se caiga el wifi.
Capturas del producto.
Cómo se ve
El stack que sostiene el producto.
Tecnologías
- Flutter
- Dart
- BLoC + GetIt
- React Router 7
- Cloudflare Durable Objects
- WebSocket
- Prisma + PostgreSQL
- Stripe
- In-app purchases
- i18n (ES/EN)
¿Algo así para tu negocio?
Si este case te hizo click, hablamos. Te respondemos en menos de un día hábil, sin compromiso.