Teachly
Em produçãoPlataforma de ensino com WhatsApp oficial, assinatura digital de documentos e certificados montados num editor de arrastar e soltar, tudo com ICP-Brasil.
Sobre
O Teachly é uma plataforma multi-tenant para escolas e cursos: cada instituição tem o próprio espaço, os próprios alunos e o próprio número de WhatsApp.
Professores aplicam provas e atividades, registram presença e acompanham a turma. Alunos recebem lembretes e avisos direto no WhatsApp e, no fim do curso, um certificado desenhado pela própria escola e assinado digitalmente no padrão ICP-Brasil.
O que faz
- Provas e atividades online
- Controle de presença por turma
- Gamificação para engajar alunos
- Avisos e lembretes 1:1 pela WhatsApp Business API
- Editor de certificados por blocos, de arrastar e soltar
- Emissão individual ou da turma inteira de uma vez
- Assinatura de documentos com vários signatários
- Assinatura ICP-Brasil validada no ITI
- Validação pública por QR code
- Onboarding guiado para administradores
Por baixo do capô
- 01
Certificado feito de blocos
Cada modelo é uma pilha de camadas: fundo, textos com placeholders (inclusive os criados pela escola), imagens, assinaturas e o QR code de validação. A escola monta tudo arrastando os blocos num editor visual com dnd-kit, e o mesmo modelo emite um certificado ou a turma inteira.
- 02
Da biblioteca não oficial para a Cloud API da Meta
O WhatsApp começou numa biblioteca não oficial, que se mostrou instável em produção. Migrei para a Cloud API oficial, com workers sem estado de envio e recebimento rodando dentro da própria API, um número por escola e fallback para o número da plataforma.
- 03
Assinatura ICP-Brasil montada à mão
A biblioteca de assinatura não gerava os atributos CAdES que a ICP-Brasil exige. Escrevi um signer próprio que monta a estrutura CMS em ASN.1, e hoje os certificados passam no validador oficial do ITI.
- 04
Filas que não duplicam nem esquecem
Lembretes, prévias e documentos passam por filas no BullMQ com deduplicação pensada caso a caso, para que nenhuma mensagem saia duas vezes e nenhuma deixe de sair.