← todos os projetos
em desenvolvimento2025projeto pessoal

Ground Zero

jogo multiplayer de sobrevivência no navegador

jogo online com economia entre jogadores, missões, guildas e chat em tempo real — o projeto onde aprendi fila, websocket e estado compartilhado.

0
processos: API e front
0
idiomas suportados
24/7
jobs recorrentes em fila
o problema

queria um projeto que forçasse tudo que sistema de gestão não força: estado que muda sozinho com o tempo, vários jogadores agindo ao mesmo tempo sobre o mesmo recurso e comunicação instantânea.

a solução

backend em Express com Prisma sobre PostgreSQL, ciclos do jogo em fila Bull no Redis, tempo real por Socket.io e frontend em Next.js com estado em Zustand e cache de servidor em React Query. interface traduzida com next-intl.

arquitetura

como as peças se conectam

  1. Navegador
    Next.js + Socket.io
  2. Express
    API e websocket
  3. Redis + Bull
    fila dos ciclos do jogo
  4. PostgreSQL
    estado persistido via Prisma
módulos — 4

o que existe dentro

Mercado

implementado

compra e venda entre jogadores, com ordens e histórico de preço.

Missões

implementado

objetivos com recompensa, progresso e ciclos de renovação.

Guildas

implementado

grupos de jogadores com papéis e recursos compartilhados.

Chat

implementado

canais em tempo real por sala e por guilda.

stack

o que foi usado

Next.js 14TypeScriptExpressPrismaPostgreSQLRedis + BullSocket.ioZustand
decisões — 3

decisões técnicas e o porquê

fila em vez de cron dentro da API

produção, energia e eventos rodam como jobs no Bull. a API não fica responsável por acordar sozinha, e um job que falha é reprocessado em vez de sumir.

Prisma para versionar o schema

num jogo o modelo muda toda semana. migração versionada evita o banco de produção divergir do código.

internacionalização desde o começo

colocar texto em arquivo de tradução no primeiro dia custa pouco; extrair string espalhada depois custa caro.

aprendizado

o que ficou

  • todo job recorrente precisa ser idempotente: a fila vai reprocessar, e a segunda execução não pode pagar a recompensa de novo.
  • estado de tempo real quer uma fonte de verdade só. quando o cliente e o servidor guardam versões do mesmo número, a divergência é questão de tempo.
← todos os projetospróximo projetoKopp Games