Skip to content

ariasbruno/hackaton-cubepath-2026

Repository files navigation

🕵️‍♂️ El Impostor - Hackatón CubePath 2026

Hero de El Impostor

¿Qué es El Impostor?

El Impostor es un juego de deducción social en el que un grupo de jugadores debe descubrir quién es el impostor entre ellos. Esta versión es la digitalización de un juego popularizado en Argentina, principalmente en programas de streaming.

🌪️ La Narrativa

Mi motivación para crear este proyecto fue crear algo que me permitiera exigir al máximo el servidor con los recursos otorgados.

Un juego con muchas conexiones en tiempo real, con una base de datos y una IA, me pareció un desafío interesante para un servidor con pocos recursos.

Aproveché para innovar en el stack tecnológico con tecnologías que nunca había usado, o había usado poco o nunca había llevado a un proyecto en producción. Entre estas:

  • ⚡ Bun: Elegí Bun como runtime nativo. Fue un salto al vacío para aprender algo nuevo y aprovechar su performance en WebSockets.
  • 🔥 Hono: Usé Hono para el backend para agilizar el desarrollo para la api con Bun.
  • 🧠 IA Dinámica: Integré Google Gemini para que el juego respire. Las palabras no son estáticas; la IA genera categorías y términos semánticamente cercanos para que cada partida sea un desafío nuevo.
  • 📦 Turborepo: Usé Turborepo para gestionar el monorepo. Uno de los primeros desafios con los que me encontre fue la utilizacion de datos compartidos entre el frontend y el backend, para lo cual utilice Zod para validar los datos que se envian entre el frontend y el backend.

🎮 Modos de Juego

Más allá de los clásicos, introduje una mecánica para cambiar un poco de aire:

  • 🕵️ Tradicional: 1 Impostor vs Agentes. El clásico juego de deducción.
  • 🔍 Palabras Cercanas: Un infiltrado con una palabra similar pero distinta. Genera confusión y tensión.
  • ⚡ Modo Caos (Original): Dos jugadores están vinculados (comparten la misma palabra) mientras el resto tienen palabras únicas relacionadas. Los vinculados deben encontrarse en el silencio, y los dispersos deben exponer a la pareja.

☁️ Despliegue y Eficiencia con CubePath

Este proyecto está desplegado 100% en CubePath utilizando un servidor gp.micro con Dokploy como orquestador. La arquitectura está diseñada para maximizar el uso de recursos limitados, configurando subdominios personalizados a través de Cloudflare para cada servicio bajo el dominio raíz brunoarias.dev.

📉 Configuración de Servicios y Límites de RAM

Servicio Límite RAM Build Type Dominio / URL
Frontend (Web) 256 MB Dockerfile impostor.brunoarias.dev
API Backend 256 MB Dockerfile api.brunoarias.dev
Game Server 512 MB Dockerfile ws.brunoarias.dev
PostgreSQL 1 GB Managed Persistencia de Datos

🚀 Stack Tecnológico

Bun React 19 Hono TypeScript Tailwind v4 Gemini AI Turborepo PostgreSQL

🏗️ Arquitectura

El sistema es un Monorepo orquestado para la eficiencia máxima:

  1. API Backend (apps/api): Hono + PostgreSQL. Gestión de perfiles y orquestación de IA.
  2. Game Server (apps/game-server): Lógica en tiempo real usando Bun Nativo (WS) para una latencia casi nula.
  3. Frontend Web (apps/web): React 19 + Zustand en una interfaz "War Room" oscura, premium y responsiva.
  4. Shared Core (packages/shared): Contratos de Zod compartidos. El frontend y el backend hablan el mismo idioma sin errores.

🛠️ Configuración Local

  1. Instalar el motor:
    bun install
  2. Encender la maquinaria:
    bun run dev
    Dato: Usa bun run dev:host para abrir una terminal dividida en Kitty.

🔑 Variables de Entorno

Tip

Cada aplicación dentro del monorepo tiene su propio archivo .env. Puedes guiarte por los archivos .env.example en cada carpeta para la configuración necesaria.

📡 API (apps/api)

Variable Descripción
DATABASE_URL URL de conexión a PostgreSQL.
ALLOWED_ORIGINS Orígenes permitidos para CORS (separados por coma).
INTERNAL_API_KEY Clave secreta compartida con el game-server para comunicación S2S.
GEMINI_API_KEY API Key de Google Gemini AI.
VITE_WS_URL URL interna para descubrimiento del servidor de juegos.
LOG_LEVEL Nivel de verbosidad de logs (info, debug, error).

🌐 Web (apps/web)

Variable Descripción
VITE_API_URL URL base de la API REST.
VITE_WS_URL URL del servidor de WebSockets (wss://...).

🎮 Game Server (apps/game-server)

Variable Descripción
INTERNAL_API_URL URL de la API para callbacks internos y lógica de juego.
INTERNAL_API_KEY Debe coincidir con la clave configurada en la API.
VITE_API_URL URL base de la API (usada en algunos contextos de cliente).
LOG_LEVEL Nivel de logs del servidor de juegos.

🛠️ Proceso de Desarrollo

Este proyecto se construyó siguiendo un proceso riguroso de planificación y ejecución:

  1. Diseño de Juego: Todo el funcionamiento se planeó paso a paso, con ideas plasmadas en Game Design (Core, Flujo, Scoring).
  2. Prototipado UX/UI: Con las reglas claras, pasé al diseño de prototipos visuales para establecer la guía estética antes de tocar una línea de código.
  3. Arquitectura Técnica: Diseñé la comunicación entre el frontend y el backend, detallada en Technical Docs.
  4. Implementación: Con todo planeado, configuré las skills y ejecuté los planes de implementación: FRONTEND y BACKEND.

Note

La documentación en docs/ se enfoca en proporcionar la estructura necesaria para el desarrollo asistido por IA. He omitido borradores iniciales y notas desordenadas de la etapa de ideación que no aportaban valor directo al código final.

🧰 Herramientas Gratuitas Utilizadas

  • Gemini CLI & Antigravity (Codificación asistida por IA).
  • SVGViewer (Optimización de vectores).
  • Iconify (Set de iconos para la interfaz).
  • Inkscape (Diseño de assets vectoriales).
  • Shots.so (Mockups y presentación visual).

📖 Documentación Relacionada

Desarrollado con ❤️ para la Hackatón CubePath 2026.

About

🎭 El Impostor: juego de deducción social con IA dinámica, multiplayer en tiempo real y arquitectura monorepo optimizada.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors