4.6 KiB
Roadmap — fork Resenha
Plano de features próprias desta instância. Arquivo exclusivo do fork (nome com sufixo para não colidir com arquivos do upstream em merges).
Escrito em português por ser documento de planejamento do dono do fork; o código e os commits seguem em inglês, como o resto do repositório.
Entregue
| Feature | Commit | Nota |
|---|---|---|
| Ir para a call clicando no nome do canal | c70b0095 |
Exigiu o voiceStore passar a guardar o espaço da call — antes ele não sabia onde a call estava assim que o usuário navegava para outro servidor |
| Botão de GIF redesenhado | 20526e1b |
Contorno vazado com letras cheias, no lugar do bloco sólido |
| Explorador de GIF no banner | 20526e1b |
Sem upload: banner já aceita URL absoluta no cliente e no servidor |
| Teste de microfone com retorno | bfe62d70 |
AudioManager.startMicTest/stopMicTest; devolve o microfone ao parar, com duas travas independentes |
| Bloco de atividade no perfil | d7da0ff2 |
ProfileActivity; inclui correção de validação de assets no servidor |
| Preview de perfil nos participantes da call | (ver git log) | O popout já existia e era aberto de 11 lugares; nenhum era de voz. Ligado nas linhas da lista de voz e no nome dos tiles da grade |
Já existia no código (verificado, não construir de novo)
- Animação de digitação —
TypingIndicator.tsx, três pontosanimate-bounceescalonados em 0/150/300ms. - Sons de call/stream —
SoundController.tsx, montado noAppLayout: stream started/ended, alguém entra/sai da tela, entra/sai da call, câmera, mute, ringing. Os.oggestão emweb/public/sounds/. - Preview de perfil ancorado —
uiStore.openUserProfile(user, anchor, placement)guardauserProfilePopout; popout posicionado no desktop, tela cheia no mobile. Já era aberto por mensagens, menções, avatares, lista de membros, DMs e painel de atividade. O que faltava era só a voz — agora ligado. Continua faltando o bloco de atividade do print do Discord, que é a #8.
Se qualquer um dos dois não se manifestar em uso, o trabalho é depuração, não implementação.
Pendente — pedido original
Ordem sugerida: as pequenas primeiro, as grandes uma de cada vez.
| # | Feature | Tamanho | Observação técnica |
|---|---|---|---|
| 6 | Favoritar GIFs + categorias | Grande | Precisa de tabela, migração drizzle e API para sincronizar entre dispositivos, como no Discord |
| 8 | Produtor de atividade do Spotify | Grande | O consumo está pronto (ProfileActivity + pipeline completo). Falta algo que gere a atividade com faixa e artista — ver abaixo |
| 9 | Registro de auditoria | Grande | Schema + ganchos em cada mutação do servidor + interface |
Pendente — ideias aprovadas
| Feature | Tamanho | Observação técnica |
|---|---|---|
| Soundboard | Média | AudioManager já carrega e toca .ogg sob demanda; falta upload por espaço, permissão e disparo na sala LiveKit |
| Estatísticas do grupo | Grande | Horas em call, quem mais falou, ranking. Depende do mesmo registro de eventos da auditoria (#9) |
| Watch party | Grande | O screen share do LiveKit já existe; falta sincronizar posição de reprodução entre participantes |
| Emojis e stickers do grupo | Média | UPLOAD_DIR e o pipeline de upload já existem; falta tabela por espaço e resolução no render de mensagem |
O que falta para o Spotify (#8)
O caminho de consumo está inteiro: tipo, store, WebSocket, validação no servidor, relay de presença e agora o bloco no perfil. Falta um produtor.
Três opções, com custos bem diferentes:
- Entrada no dicionário do detector (
activityDetector.tslê um JSON de processos, elisteningjá é um tipo válido). Custo quase zero, mas dá apenas "Listening to Spotify" — sem faixa nem artista — e só no app Electron. - Ler o título da janela do Spotify no processo main do Electron. O título
é "Artista - Faixa", então preenche
detailsestate. Ainda só desktop, e sem capa nem duração. - Spotify Web API com OAuth. É a única que cobre quem usa pelo navegador — que é a maioria do grupo — e a única que traz capa e progresso. Bloqueio: exige registrar um app no dashboard do Spotify e obter client id/secret. Isso é ação sua; eu não consigo fazer.
Dependência que vale respeitar
Auditoria (#9) e Estatísticas compartilham o mesmo mecanismo: uma tabela de eventos append-only no servidor. Construir a auditoria primeiro e as estatísticas como leitura agregada dessa mesma tabela evita escrever dois sistemas de registro paralelos que divergem com o tempo.