Skip to content

Correção geral: estabilidade, chamadas, GIFs, sons, perfis, player mobile e interface unificada - #128

Merged
RiqueBitt merged 6 commits into
mainfrom
correcao-geral-out2026
Oct 23, 2026
Merged

RiqueBitt merged 6 commits into
mainfrom
correcao-geral-out2026

Conversation

@RiqueBitt

Copy link
Copy Markdown
Owner

Correção geral do Project Club: estabilidade do servidor e das chamadas, GIFs, efeitos sonoros, decorações/perfil, player mobile e unificação da interface.

Causas encontradas e correções

Servidor (VPS/Shard Cloud)

  • Reconexão em massa fazia trabalho O(N²): cada socket refazia o findMany de todo mundo online + 1 GET no Redis por pessoa → linhas de presença em cache compartilhado (3s, corrigido a cada mudança de status) e MGET das atividades.
  • Heartbeat 8s/8s derrubava todo mundo de uma vez com o servidor ocupado (ciclo de reconexões) → 15s/20s.
  • npm ci rodava a cada reinício do container → pulado quando o package-lock não mudou.
  • Heap em 70% do container → 60% + relatório em queda por falta de heap (sem variáveis de ambiente) + métricas a cada 5 min (RSS, heap, buffers, atraso do event loop, sockets).
  • Cache sem proteção contra "stampede" → cálculo único compartilhado.
  • /media/:key: handshake TLS novo por imagem e stream sem tratamento de erro → cliente de leitura com keep-alive + pipeline.
  • Capa de atividade em base64 de até 300KB ia pra todos → até 64KB (maior é descartada, não cortada).

Chamadas

  • voice:sync expulsava o aparelho que acabou de reconectar → serializado com o join; só expulsa socket que já esteve na sala ou mais antigo que a dona.
  • Pessoa sumia da lista com a mídia viva → antes de remover, o backend pergunta ao media-server (GET /peer, nova rota só leitura); estende a tolerância até 5×.
  • Limite de mensagens do media-server (pico 120) recusava consumes em sala cheia → pico 400 + nova tentativa no cliente.
  • Câmera e tela da mesma pessoa se sobrescreviam → um stream por fonte.
  • Entrada esperava ICE/DTLS (até 12s) → não espera mais (o vigia de primeira conexão cuida da falha); transports criados em paralelo; biblioteca de mídia pré-carregada.
  • "Está falando" de canal privado vazava pra comunidade; ordem dos eventos preservada.
  • coturn --user-quota 12 → 48; bitrate inicial 800k → 1,5M.

GIFs: chave da KLIPY só existia na hospedagem, mas o site é compilado no CI sem ela → busca agora passa pelo servidor (/api/gifs/*, autenticado, limite por pessoa, cache no Redis). A chave não vai mais pro navegador.

Efeitos sonoros: em outubro o pacote "Automático" virava Dia das Bruxas (síntese com passa-baixa em 1,3 kHz) e os WAV originais passavam por passa-baixa em 3,2 kHz → arquivos tocam limpos, automático não substitui sons gravados, filtros da síntese só cortam chiado (Q 0,707).

Decorações: o recorte era liberado só no pai direto; com o botão "ver foto" quem cortava era o avô → camadas explícitas no UserAvatar + recorte liberado em qualquer caixa de avatar; tamanhos 112→116 / 80→70 corrigidos.
Rodelinha: 3 regras brigando → geometria única (centro na borda do círculo) no miniperfil e no perfil.
Player mobile: áudio com barra arrastável no toque, duração de mensagens de voz WebM, estado real, ícones SVG, erro com link pra baixar; vídeo com playsInline e altura limitada.

Interface: busca do topo = busca rápida (Ctrl+K, resultados abaixo do campo, pessoas do servidor com debounce/cancelamento/cache, "Ver todos os resultados"); no celular a lupa abre a mesma busca. Painel na barra superior, à direita da engrenagem, só ADMIN (mesmo critério de /api/admin). Aba Sobre sem Notas, Recados no lugar. Canal "Anúncios e Eventos" (abas internas, rotas antigas mantidas). Economia + Loja na mesma barra de abas (Loja à esquerda do Passe). Canais em destaque atualizados.

Testes

  • servidor: 336 ✔ (1 falha pré-existente de ambiente: cliente Prisma não gerado) — inclui 9 novos (correcao-geral.test.js)
  • cliente (unit): 92 ✔ · media-server: 33 ✔ · E2E WebRTC real: ✔
  • Playwright: ver comentário no PR

Depois do merge

  • Media-server (VPS Hostinger): git pull + docker compose up -d --build (compatível com o backend antigo; o backend novo funciona com o media-server antigo).
  • O passo "Atualizar a Shard Cloud" do CI está sendo pulado (sem o secret SHARDCLOUD_API_KEY).

Generated by Claude Code

…, efeitos sonoros, decorações, player mobile e unificação da interface

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0129N2pJRfanWJZV2QhXL1CV
…o foco, ordem do 'falando', transporte órfão, relatório de falha sem segredos

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0129N2pJRfanWJZV2QhXL1CV

Copy link
Copy Markdown
Owner Author

Playwright (build final, sem os mini-jogos): 172 ✔, 15 pulados, 5 ✘. As 5 falhas são 3 testes que falham igual na main atual (conferido rodando a main): conforto.spec:120 (Alt+↓), discord-features.spec:49 e loja.spec:26 (Loja), no PC e no celular. Nenhuma regressão destas mudanças.


Generated by Claude Code

…testes da Loja atualizados; Alt+↑/↓ e Esc entendem os links bonitos

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0129N2pJRfanWJZV2QhXL1CV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0129N2pJRfanWJZV2QhXL1CV
…5 min de limite

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0129N2pJRfanWJZV2QhXL1CV
@RiqueBitt
RiqueBitt merged commit 7d8264e into main Oct 23, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants