docs: update roadmap after mic test and activity work
OpenSSF Scorecard / Scorecard analysis (push) Waiting to run
CI / Build & test (Node 20) (push) Canceled after 0s
CI / Build & test (Node 24) (push) Canceled after 0s
CI / Build & test (push) Canceled after 0s
CodeQL / Analyze (javascript-typescript) (push) Canceled after 0s
Security / Secret scan (gitleaks) (push) Canceled after 0s
Security / Dependency scan (OSV-Scanner) (push) Canceled after 0s
Security / IaC/config scan (Trivy) (push) Canceled after 0s
Security / License compliance scan (Trivy) (push) Canceled after 0s

This commit is contained in:
2026-08-31 12:05:18 -03:00
parent d7da0ff203
commit b92a0d837e
+22 -2
View File
@@ -13,6 +13,8 @@ código e os commits seguem em inglês, como o resto do repositório.
| 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 | | 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 | | 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 | | 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 | | 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) ## Já existia no código (verificado, não construir de novo)
@@ -37,9 +39,8 @@ Ordem sugerida: as pequenas primeiro, as grandes uma de cada vez.
| # | Feature | Tamanho | Observação técnica | | # | Feature | Tamanho | Observação técnica |
|---|---|---|---| |---|---|---|---|
| 10 | Teste de voz com loopback | Média | `AudioManager.playTestTone()` já existe; falta capturar o mic e devolver no monitor, com "Stop Testing" |
| 6 | Favoritar GIFs + categorias | Grande | Precisa de tabela, migração drizzle e API para sincronizar entre dispositivos, como no Discord | | 6 | Favoritar GIFs + categorias | Grande | Precisa de tabela, migração drizzle e API para sincronizar entre dispositivos, como no Discord |
| 8 | Atividade (Spotify etc.) | Grande | `activityStore` e `activityBridge` já existem, mas a detecção é via Electron; Spotify exige OAuth e presença via WebSocket | | 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 | | 9 | Registro de auditoria | Grande | Schema + ganchos em cada mutação do servidor + interface |
## Pendente — ideias aprovadas ## Pendente — ideias aprovadas
@@ -51,6 +52,25 @@ Ordem sugerida: as pequenas primeiro, as grandes uma de cada vez.
| Watch party | Grande | O screen share do LiveKit já existe; falta sincronizar posição de reprodução entre participantes | | 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 | | 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:
1. **Entrada no dicionário do detector** (`activityDetector.ts` lê um JSON de
processos, e `listening` já é um tipo válido). Custo quase zero, mas dá
apenas "Listening to Spotify" — sem faixa nem artista — e **só no app
Electron**.
2. **Ler o título da janela do Spotify** no processo main do Electron. O título
é "Artista - Faixa", então preenche `details` e `state`. Ainda só desktop, e
sem capa nem duração.
3. **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 ## Dependência que vale respeitar
**Auditoria (#9) e Estatísticas compartilham o mesmo mecanismo**: uma tabela de **Auditoria (#9) e Estatísticas compartilham o mesmo mecanismo**: uma tabela de