Caixote é uma família de cinco apps auto-alojadas — ficheiros, conversas, tarefas, agenda, feeds e um controlo de impressora. Quatro delas (Docs, Chat, Agenda e RSS) são binários únicos em Rust que se ligam entre si e partilham uma só conta; a sexta, o Caixote CC2, funciona sozinha.
A mesma ideia em todas: software pequeno, rápido e teu. Docs, Chat, Agenda e RSS partilham o mesmo visual e uma só conta e ligam-se entre si; o Caixote CC2 é a da oficina e não precisa de nenhuma delas. Usa só uma ou liga as quatro.
Navegador de ficheiros com pesquisa no conteúdo de documentos, OCR para PDF digitalizados, editores de documentos, folhas de cálculo, apresentações e PDF, e muitas pré-visualizações.
Conversas com cifragem ponta-a-ponta, ficheiros, notas de voz e chamadas de vídeo.
Tarefas e agenda numa só app: um Plano para partilhar e sincronizar e uma agenda Privada cifrada no teu browser.
O teu leitor de feeds: pastas, pesquisa, etiquetas e regras, texto completo e nenhum algoritmo pelo meio.
Controlo e stock de bobinas para a Elegoo Centauri Carbon 2, com uma IA opcional que vigia a câmara.
Um navegador de ficheiros web que sabe o que está dentro deles. Aponta-o a uma pasta e pesquisa o texto de documentos e PDF, incluindo digitalizados. As imagens encontram-se pelo nome.
Um chat onde nem o servidor consegue ler. A criptografia corre no teu dispositivo; o servidor guarda texto cifrado (mas vê quem fala com quem, e quando).
Tarefas e agenda numa só app, com um Plano que podes partilhar e sincronizar e uma agenda Privada que o servidor não consegue ler.
Um leitor de feeds que não faz barulho: as tuas subscrições, as tuas regras, e nada a decidir o que deves ler a seguir.
A tua impressora 3D, na tua rede. Pausa uma impressão do sofá, vê que bobina está a acabar e deixa uma IA vigiar a câmara — sem nenhuma nuvem do fabricante pelo meio.
Projeto não oficial, sem ligação à Elegoo. Os comandos vão para uma máquina que aquece e se move: usa por tua conta e risco.
As apps não falam umas com as outras nos bastidores. Quem as emparelha és tu, no browser, e elas trocam mensagens validadas. O servidor do Caixote Chat continua a guardar só conteúdo cifrado.
Painel de chat dentro do Caixote Docs: «Enviar no chat…» a partir de um ficheiro e «Guardar no Caixote Docs» ao receber.
Partilha uma tarefa ou um evento numa conversa, como um cartão que remete para a app.
No Caixote Agenda, as tarefas com prazo aparecem no calendário da própria app (o módulo calendário).
De um artigo no Caixote RSS, envia uma mensagem para o Caixote Chat, ou uma tarefa, um evento ou uma nota para o Caixote Docs. O receptor mostra o que chegou e pergunta antes de guardar. Os artigos a que dás estrela viram ficheiros Markdown numa pasta Notícias do Caixote Docs, pesquisáveis com tudo o resto (num só sentido: tirar a estrela apaga o ficheiro intacto; um ficheiro que editaste fica).
As apps emparelham-se com um código de uso único, cada conta escolhe as apps que liga, e o início de sessão é partilhado por bilhete assinado, com desbloqueio automático opcional. A palavra-passe nunca circula entre apps.
Cada uma das quatro apps ligadas é um binário Rust com poucas dependências, uma base SQLite e uma interface em JavaScript simples, sem frameworks e sem pedidos a terceiros por parte das quatro apps ligadas (as fontes são locais). As excepções são o que pedes: o Caixote RSS a obter feeds e imagens, e o email opcional. O Caixote CC2 pode mostrar ícones de marcas de filamento obtidos nos sites das próprias marcas (esses sites passam a ver o teu endereço); a opção vem ligada na app e desligada na demo.
| App | Servidor | Dados | Segurança | Estado de desenvolvimento |
|---|---|---|---|---|
| Caixote Docs | Rust · HTTP próprio | Ficheiros + SQLite (FTS5) | Sessões, PBKDF2, CSRF, limites de tentativas | em uso PWA em teste |
| Caixote Chat | Rust · SSE · WebRTC | SQLite + blobs cifrados | E2EE: X25519, Ed25519, AES-256-GCM | funcional PWA em teste · apps nativas a seguir |
| Caixote Agenda | Rust · rusqlite · SSE | SQLite | Permissões no servidor, SSO por bilhete; agenda Privada cifrada no browser (PBKDF2 + AES-GCM) | funcional PWA instalável, ainda sem modo offline |
| Caixote RSS | Rust · curl do sistema | SQLite (FTS5) | HTML limpo duas vezes, proxy de imagens assinado, protecção SSRF, SSO por bilhete | funcional |
| Caixote CC2 | nginx · JS simples (+ Python para a verificação por IA) | Um ficheiro JSON no servidor | Sem nuvem; a chave da IA fica no servidor (modo 600) e nunca é devolvida | funcional verificação por IA ainda não testada numa impressão real |
A cifragem do Caixote Chat ainda não tem forward secrecy por mensagem (planeado: Double Ratchet / MLS), e o servidor vê metadados, como quem fala com quem e quando. Tudo o que está no Plano do Caixote Agenda, sincronizado com o Caixote Docs ou não, fica em claro no servidor (é o que permite lembrar, partilhar e sincronizar), por isso não tem cifragem de ponta a ponta; só a agenda Privada tem, e não se pode partilhar. Os limites do Caixote Chat estão escritos nas suas notas de desenho.
As funcionalidades entram com testes unitários, de API e de interface num Firefox real. Há ficheiros Docker para todas as apps, mas só o do Caixote Docs foi testado e ainda não há nada publicado.
# Caixote Agenda → http://localhost:8350 podman run -d -p 8350:8350 -v caixote-agenda-data:/data caixote-agenda