Pular para o conteúdo
Hugo Otoch
Voltar ao arquivo

SHIP//PROD

Privado · sem demo pública

Peladinhas Sofredores

Projeto autoral · Abr 2026 → atual

Gestão de uma pelada semanal de ponta a ponta, com sorteio de times por algoritmo e overall que se recalcula a cada rodada.

  • ~19k

    linhas de código próprio

  • 62

    testes passando

  • 0,25

    ponto de desnível médio entre times

O problema

Uma pelada semanal entre amigos tem caixa, mensalidade, convidado, presença e discussão sobre time desequilibrado — tudo isso vivia em planilha e grupo de WhatsApp.

O que eu construí

Aplicação web com dois níveis de acesso que cuida do caixa do grupo, da lista de presença, do sorteio de times equilibrados por nível técnico e de um sistema de avaliação entre jogadores que recalcula o overall de cada um a cada rodada, no estilo FIFA.

Decisões e por quê

  1. [ 01 ]

    Busca exata até onde ela cabe

    O balanceador distribui os confirmados buscando o menor desnível possível, considerando o overall de cada jogador e o equilíbrio de defensivos. Até 16 jogadores faz busca exata com backtracking; acima disso cai para heurística gulosa com refinamento por troca de pares. Nos prints o desnível médio ficou em 0,25 ponto.

  2. [ 02 ]

    Snapshot em vez de recálculo retroativo

    O overall usado no sorteio fica congelado na presença daquela pelada. O passado não muda quando o presente muda — histórico que se reescreve sozinho é histórico que mente.

  3. [ 03 ]

    Estorno em vez de delete

    Lançamento errado vira VOIDED e continua auditável. Todo valor monetário é Decimal, nunca float.

  4. [ 04 ]

    Monolito de propósito

    O público real são algumas dezenas de pessoas. Nada de microsserviço, fila ou cache distribuído: o custo apareceria e o benefício não. A separação acontece onde importa — o cálculo de balanceamento vive em módulo próprio, testado isoladamente.

  5. [ 05 ]

    Autorização sempre no servidor

    Permissão explícita por view, padrão negar, e nenhum campo vindo do cliente decide o que o usuário pode fazer.

As telas

Capturas reais da aplicação rodando, com dados fictícios gerados pela própria massa de demonstração do projeto. Passe o cursor para a página descer.

peladinhas-sofredores
Peladinhas Sofredores: dashboard financeiro com saldo consolidado, entradas, saídas e fluxo mensal
Peladinhas Sofredores: dashboard financeiro com saldo consolidado, entradas, saídas e fluxo mensal
peladinhas-sofredores
Peladinhas Sofredores: pré-jogo com lista de presença e os times já sorteados pelo algoritmo
Peladinhas Sofredores: pré-jogo com lista de presença e os times já sorteados pelo algoritmo
peladinhas-sofredores
Peladinhas Sofredores: ranking com pódio, tabela de overall e artilharia da temporada
Peladinhas Sofredores: ranking com pódio, tabela de overall e artilharia da temporada
peladinhas-sofredores
Peladinhas Sofredores: portal do jogador com overall, gráfico de evolução e time da semana
Peladinhas Sofredores: portal do jogador com overall, gráfico de evolução e time da semana
peladinhas-sofredores
Peladinhas Sofredores: elenco em cards no estilo FIFA, com posição, camisa e overall
Peladinhas Sofredores: elenco em cards no estilo FIFA, com posição, camisa e overall

No celular

A mesma aplicação na tela pequena, que é onde ela é realmente usada.

Peladinhas Sofredores no celular: votação de notas, um jogador por vez, com slider e contagem regressiva

Tela 01 de 05

Stack

  • Python 3.12
  • Django 4.2
  • Django REST Framework
  • PostgreSQL
  • React 18
  • TypeScript
  • Vite
  • GSAP
  • Docker Compose
  • GitHub Actions
  • Pytest
  • Playwright
  • Ruff