Todos os projetos
PROJETO PESSOAL / No ar

Roundkeep.

Uma mesa de combate de D&D 5e que funciona sem internet.

  • TypeScript
  • Socket.IO
  • IndexedDB
  • Service Worker
  • PWA
  • Python
Tela de encontro do Roundkeep: biblioteca de criaturas à esquerda, ordem de iniciativa com PV e classe de armadura no centro e a ficha da criatura selecionada à direita.

Visão geral

O Roundkeep conduz um combate de D&D 5e no navegador: iniciativa, PV, condições e uma biblioteca de criaturas e magias do SRD. Ele roda na máquina do mestre, sem conta e sem nuvem, e os jogadores acompanham o combate pelo celular na mesma rede.

O que faz

  • Mesa de combate com turnos, rodadas, iniciativa editável, dano, cura, PV temporário e condições.
  • Biblioteca offline com 331 criaturas e 319 magias do SRD 2024.
  • Importação do Improved Initiative ou de backups do Roundkeep, com uma etapa de revisão antes de salvar.
  • Visão dos jogadores em /p/{id} para celulares na rede local.
  • Backups portáteis em JSON para levar uma campanha para outro dispositivo.
  • Atalhos de teclado para próximo turno, busca na biblioteca, dados e desfazer.

Como foi construído

  • A visão dos jogadores atualiza ao vivo via Socket.IO na rede local, com BroadcastChannel como alternativa dentro do mesmo navegador.
  • Os catálogos ficam no IndexedDB e o encontro é salvo a cada mudança. Depois do primeiro carregamento, um service worker faz o build de produção funcionar offline, com versões de cache geradas no build.
  • Web Locks permitem que só uma aba do mestre edite a campanha por vez, para que duas abas nunca sobrescrevam uma à outra. As janelas dos jogadores ficam abertas em paralelo.
  • A mesa fica disponível na rede local, mas o endpoint de bootstrap que serve os dados privados da campanha só responde em loopback. Não é uma sala pública na nuvem.
  • O catálogo SRD é convertido do Open5e v2 por um script Python reproduzível, com créditos e licenças incluídos no app.
  • Os testes cobrem regras de encontro, dados do catálogo e importação.

As criaturas vêm do SRD 5.2 (2024) via Open5e, sob CC BY 4.0. As magias vêm do catálogo básico distribuído pelo Improved Initiative.