Valeu demais!
Acho que vale a pena falar um pouco mais sobre a performance. Duas coisas que influenciaram positivamente nisso foram o uso do :dets
para guardar as informações dos jogos e também do LiveView no frontend.
O primeiro é um banco em memória nativo do ecossistema que também permite salvar os dados num arquivo. O lado bom é que dá pra adicionar esse arquivo no Git, mandar pra lá e pra cá e boa. Também tem muitas outras características que valem a pena de saber, mas pro meu caso só isso já ajuda bem. O lado ruim é que tem uma notação toda particular, mas dá pra se acostumar. Neste momento, é o suficiente. Mas dependendo de como ser o futuro, talvez precise ir para algo mais tradicional.
O segundo permite que todas as interações da app sejam feitas com websockets, com diff da resposta para retornar só o que foi de fato alterado, deixando tudo bem mais rápido. Disso aqui eu não abro mão. :)