Skip to content
GUILTY cover
// In-house app·2026·Forza

GUILTY

A Forza in-house product: a real-time multiplayer party-games suite, on mobile and web.

The idea behind our own product: what it explores and why we built it.

The project

Guilty is a Forza in-house product: a party-games suite for groups. It bundles eight games —truth or dare, never have I ever, would you rather, most likely to, tipsy, tower, mixed and a social-deduction impostor— in an iOS and Android app (Flutter) and on the web, with live multiplayer rounds of 2 to 12 players and English/Spanish support. We built it to explore real-time cross-platform multiplayer end to end: state synced over WebSocket, rooms that work even without internet, and a freemium model with in-app purchases and Stripe. It's live on guilty.mx, on the App Store and on Google Play.

What they came to solve, in plain language.

Challenge

  1. 01Sync rounds in real time across many players, without the state drifting.
  2. 02One product across iOS, Android and web, with the same game logic.
  3. 03Rooms that also work without internet (local / LAN mode).
  4. 04Eight different games sharing one game engine.
Made byForza
Year2026
CategoryIn-house app
DurationProducto propio / In-house product
RoleIdea, product, app (Flutter), real-time backend, design

The pieces that make the product work.

What we built

Real-time

Live multiplayer

One player opens a room, the others join with a code and play live: turns, votes and phases sync instantly across everyone. The backend runs on Cloudflare Durable Objects with WebSocket, and with no internet the host spins up a local (LAN) room with no server.

  • Rooms with an invite code
  • Synced turns and votes
  • Host view and player view
  • Fallback to a local room with no internet (LAN)
Content02

A suite of 8 games

Truth or dare, never have I ever, would you rather, most likely to, tipsy, tower, mixed and a social-deduction impostor (Among Us style). All share one game engine, with chill and guilty modes.

  • 8 games on a shared engine
  • Social-deduction impostor
  • Chill and guilty modes
  • Content editable from an internal tool
Cross-platform03

Mobile and web, one product

Native iOS and Android app with Flutter (published in the stores) and a web version with React Router 7, sharing the same game logic and the same backend. Players join from anywhere and play together.

  • iOS and Android (Flutter, in stores)
  • Web with React Router 7
  • Same backend across all platforms
  • Spanish and English
Business04

Freemium in the stores

A complete freemium model: free chill mode and premium guilty mode by subscription. In-app purchases on iOS and Android and Stripe payments on web, with subscription state synced across platforms.

  • In-app purchases (iOS / Android)
  • Stripe payments on web
  • Subscription synced across platforms
  • Free trial and no-cost chill mode

How we built the product, step by step.

Process

  1. 01

    Concept

    We defined the product: which games, how group play works and what makes live multiplayer special. An in-house experiment to push real-time cross-platform.

    • Games and modes definition
    • Rounds and rooms model
  2. 02

    Architecture

    A Flutter app (clean architecture + BLoC) for mobile and a real-time backend on React Router 7 over Cloudflare Durable Objects and WebSocket, with Prisma/PostgreSQL for data.

    • Flutter app + real-time backend
    • Sync protocol
  3. 03

    Game engine

    Each game as a state machine (phases, turns, votes) on a shared engine, so new games drop in without rewriting the round logic.

    • Shared round engine
    • 8 games implemented
  4. 04

    Multiplayer

    Live rooms over WebSocket on Durable Objects, with host and player views, and a fallback to a local (LAN) room when there's no internet.

    • Synced online rooms
    • Offline local mode
  5. 05

    Launch

    Published on the App Store and Google Play, web live on guilty.mx, and the freemium model with in-app purchases and Stripe active across all platforms.

    • iOS, Android and guilty.mx live
    • Freemium live (IAP + Stripe)

The product by the numbers.

By the numbers

one shared round engine0
Games in a single app

Truth or dare, never have I ever, would you rather, most likely to, tipsy, tower, mixed and impostor — all on the same engine.

one game core0
Platforms: iOS, Android and web

Native app in both stores (Flutter) and a web version (React Router 7), with the same backend.

synced over WebSocket0
Players per room, live

2 to 12 players in the same real-time round, with a fallback to a local room without internet.

local room mode (LAN)0
Internet to play in a local room

The host spins up a LAN room and players join with no connection — the party goes on even if the wifi drops.

The stack behind the product.

Technologies

Mobile app
  • Flutter
  • Dart
  • BLoC + GetIt
Real-time backend
  • React Router 7
  • Cloudflare Durable Objects
  • WebSocket
  • Prisma + PostgreSQL
Product & monetization
  • Stripe
  • In-app purchases
  • i18n (ES/EN)

Want something like this for your business?

If this case clicked for you, let's talk. We reply within one business day, no strings attached.