Texto em tempo real
Canais de texto com histórico, anexos, edição e exclusão de mensagens, e indicador de não lidas em todos os servidores ao mesmo tempo.
Em testes · acesso por convite
O FFCom organiza a conversa do jeito que você já conhece: servidores, categorias e canais de texto, voz e fórum. A diferença está em quem guarda tudo isso, porque cada servidor roda na máquina de quem cria a comunidade, e nenhuma empresa pode desligar, vender ou mudar as regras dele por você.
No app para Windows, o próprio app avisa quando há versão nova. Ao instalar, o Windows pode mostrar "O Windows protegeu o computador": clique em Mais informações e em Executar assim mesmo.
No Android, o app vem como APK, fora da Play Store. Ao abrir o arquivo, o Android pede para permitir instalar apps desta fonte (o navegador ou o app de arquivos), e o Play Protect pode avisar que o app é desconhecido: toque em Mais detalhes e em Instalar mesmo assim. Depois, o próprio app avisa quando há versão nova. Todas as versões do APK, com as notas de cada uma, ficam nas releases do app no GitHub.
Tudo abaixo já está implementado e no ar na instância de testes.
Canais de texto com histórico, anexos, edição e exclusão de mensagens, e indicador de não lidas em todos os servidores ao mesmo tempo.
Canais de voz com câmera, compartilhamento de tela, push-to-talk e atalho para mutar, rodando num LiveKit que fica no seu próprio servidor.
Para o que não pode se perder no meio do chat: tópicos com respostas, organizados como qualquer outro canal.
Cargos com permissões por servidor e ajustes por canal, além de convites, expulsão e banimento de membros.
Lista de amigos com presença, e mensagens diretas cifradas de ponta a ponta: nem o servidor que entrega a mensagem consegue lê-la.
Funciona no navegador e pode ser instalado como aplicativo (PWA). A versão desktop em Electron está em preparação.
São três peças, e só uma delas é central, a que guarda a sua conta.
server-central · uma instância oficial
Login, perfil, amigos, mensagens diretas cifradas e a lista dos servidores em que você entrou. Não guarda as conversas dos servidores.
client · web e desktop
Um só aplicativo conversa com quantos servidores você quiser, cada um no endereço de quem o hospeda.
server-channel
server-channel
server-channel
Cada server-channel guarda os próprios canais, mensagens, arquivos e chamadas de voz. Se um deles sair do ar, os outros seguem funcionando, e ninguém de fora decide quem entra: só se chega a um servidor por convite ou pelo endereço dele.
Um servidor FFCom é um diretório com um docker-compose.yml e um arquivo .env. Ele sobe o serviço, o banco Postgres, o LiveKit para voz e vídeo e um servidor TURN para atravessar NAT, sem compilar nada na sua máquina.
Depois de instalado, o servidor se atualiza sozinho: ele consulta um índice de versões assinado, confere a assinatura e o hash de cada binário e volta para a versão anterior se a nova não subir.
Hoje a imagem é publicada para linux/amd64. Na frente do servidor vai um proxy reverso com HTTPS; o guia recomenda o Caddy, que emite o certificado sozinho.
# no diretório server-channel do repositório
$ cp .env.example .env
$ nano .env # senhas, chaves do LiveKit, IP público
$ docker compose up -d
[+] Running 4/4
✔ Container server-channel-postgres-1 Healthy
✔ Container server-channel-livekit-1 Started
✔ Container server-channel-coturn-1 Started
✔ Container server-channel-app-1 Started
$ curl -s localhost:8080/healthz
{"status":"ok","version":"0.7.1"}
FFCom quer dizer Friends & Family Communication.
A turma para quem você liga sem avisar merece um lugar para conversar que seja de vocês, e não um espaço alugado de uma empresa que pode mudar as regras amanhã. O FFCom nasceu daí: para conversar com quem importa, num servidor que você controla.
O logo conta a mesma história. São dois f que dividem a mesma barra, como na ligadura clássica da tipografia, dentro de um balão de conversa: a barra que atravessa os dois é o laço entre as pessoas.
O FFCom está em testes com usuários reais na instância oficial, e cada conta nova passa por aprovação: peça a sua aqui. O código é público no GitHub, sob a licença AGPL-3.0, e o que falta fazer está no TODO do projeto. As decisões técnicas, com as alternativas consideradas e o motivo de cada escolha, ficam em docs/architecture.md.
Peça sua conta na instância oficial do FFCom. Cada pedido é lido por uma pessoa antes de ser aprovado.
A conta sozinha dá acesso às mensagens diretas com amigos. Canais de texto, voz, vídeo e fórum vivem nos servidores de comunidade (server-channel): para usar o FFCom por inteiro, você precisa do seu próprio ou de um convite para o servidor de alguém.
Depois da aprovação, chega um e-mail para você escolher a senha. Se o pedido não for aprovado, nenhum e-mail é enviado.
Já tem conta em outro serviço da infra A3S? Marque a opção no formulário: aprovado o pedido, você entra no FFCom com o mesmo usuário e senha, sem e-mail novo.
Sugira o que você quer ver no FFCom e vote nas ideias das outras pessoas. As mais votadas entram primeiro no próximo ciclo de desenvolvimento.
Uma sugestão por pessoa por dia. Like vale 2 pontos e dislike tira 1. Sugestões ofensivas são descartadas, e as que a verificação automática não liberar só aparecem depois de um moderador aprovar.
O que cada versão publicada trouxe. App, servidor central e servidor de comunidade têm versões independentes.
O que a instância oficial do FFCom guarda e por onde passa cada coisa.
Conta. O pedido de cadastro (nome, nome de usuário, apelido, e-mail, o motivo e o endereço IP de onde veio) fica no servidor central para a análise. Aprovada a conta, o login e a senha ficam no Authentik da instância. O servidor central guarda o perfil (nome de exibição, avatar e idioma), a lista de servidores, as amizades e as mensagens diretas, que são cifradas de ponta a ponta: ele guarda só o texto cifrado e não consegue ler.
Comunidades. Mensagens, anexos e membros de cada comunidade ficam no servidor de comunidade (server-channel) dela, sob o controle de quem o hospeda, e não no servidor central. Voz, vídeo e tela compartilhada passam pelo servidor de mídia dessa comunidade e não são gravados pelo FFCom.
Notificações no app Android. Para avisar de mensagens com o app fechado, o app usa o Firebase Cloud Messaging, do Google. O aparelho registra no servidor central o identificador de notificação dele. A cada mensagem nova num canal, o servidor central manda pelo Firebase o nome do servidor e do canal, o nome de quem escreveu e até 300 caracteres do texto; nas mensagens diretas, que são cifradas, vai só o nome de quem mandou. Esse conteúdo não fica guardado no servidor central e passa pelo Google só em trânsito (o Firebase segura a mensagem por até 24 horas enquanto o celular está sem conexão). Todos os avisos (de canal, de mensagem direta e de amizade) levam também um link temporário para a foto de perfil de quem mandou, que o app baixa do servidor central. O link vale por até 48 horas e usa um identificador aleatório, impossível de adivinhar.
Dá para silenciar um servidor ou um canal pelo menu dele, desligar as notificações do FFCom nas configurações do Android ou sair da conta, que tira o aparelho da lista. No navegador e no app para computador nada passa pelo Firebase.