Sobre o projeto
Bento é uma suíte de escritório de código aberto cuja ideia central é que o documento é o software: uma apresentação é um único arquivo HTML autossuficiente que carrega seu próprio visualizador, apresentador e editor. Abra-o em qualquer navegador moderno e ele é o editor; salve, e ele reescreve seu próprio bloco de dados. O primeiro app, Bento Slides, é uma alternativa ao PowerPoint distribuída como um único arquivo de ~560 KB (Bento_Slides.bento.html), sem conta ou instalador.
Principais capacidades descritas no README:
- Portabilidade em um arquivo: apresentação, fontes, imagens, gráficos, animações e o editor completo viajam juntos; os dados do documento ficam em um bloco JSON simples e legível perto do topo do arquivo, portanto são inspecionáveis e editáveis por ferramentas externas.
- Autossalvamento: o arquivo reescreve seu próprio bloco de dados ao salvar via File System Access API, com fallback de download.
- Apresentação morph: elementos que compartilham um id animam entre slides em posição, tamanho, cor e gradientes, calculados a partir do modelo do documento em vez do DOM.
- Colaboração ao vivo: criptografia ponta a ponta (AES-GCM) com chaves armazenadas no arquivo, não em um servidor; um relay de sincronização cega opcional armazena apenas texto cifrado. A mesclagem usa um CRDT próprio com mesclagem de texto em nível de caractere, testado por fuzzing por um script de teste de convergência.
- Gráficos integrados: barras, linhas, pizza e dispersão desenhados por um motor sem dependências, interativos durante apresentações, com morphing de dados entre tipos de gráfico.
- Formato amigável à IA: como o documento é JSON simples, agentes baseados em arquivos (Claude Code, Cursor, Aider) podem editar .bento.html no local, e chatbots podem fazer round-trip do JSON via window.bento.loadDoc. Está documentado que funciona offline com modelos locais de pesos abertos via Ollama, llama.cpp ou LM Studio.
- Autoatualizações assinadas: as versões são assinadas com ECDSA e oferecidas no app; a atualização grava um novo arquivo enquanto o antigo permanece como rollback.
- Outros recursos listados: visão do palestrante, comentários, layouts, estados interativos ocultos, revelações ao passar o mouse, caminhos de movimento, exportação em PDF, tamanhos de página e 8 idiomas de interface.
A arquitetura é resumida como um modelo de documento em TypeScript (slides/src/model.ts) com um único renderizador usado para a tela do editor, miniaturas e modo de apresentação; Reveal.js conduz a navegação; animação, gráficos e colaboração são componentes próprios. O shell comprime para cerca de 560 KB com o bloco do documento deixado como texto simples.
O README é franco sobre o modelo de segurança: as chaves de colaboração são geradas no lado do cliente e vivem apenas no arquivo, então possuir o arquivo equivale a ser membro e a rotação de chaves é a revogação; o relay vê texto cifrado, timing de conexão e um hash da chave da sala; nomes de presença são alegações, não provas; verificações de atualização buscam um manifesto estático e verificam assinatura, hash e monotonicidade de versão. Trade-offs conhecidos incluem desfazer baseado em snapshot durante colaboração ao vivo e uma experiência de edição desktop-first, com telefones mais adequados para visualizar e apresentar.
Compilar a partir do código-fonte requer Node 20+ e npm; o app é uma build de página única sem backend. Os comandos incluem npm run dev, npm run build:single e um script de teste de convergência do CRDT. As versões são cortadas localmente para que a chave de assinatura permaneça na máquina do mantenedor. A documentação cobre arquitetura, a especificação normativa do formato bento/slides, design de colaboração e modelo de ameaças, e um guia para agentes. O roadmap nomeia apps futuros: bento/spaces (notas), bento/dash (planilhas e tabelas) e bento/vault, cada um como seu próprio distributível .bento.html. Tudo é licenciado sob MIT, com componentes de runtime incluídos sob MIT e tipografias incorporadas sob OFL.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.