Oraculum
Leitor de livros em PDF pelo celular, feito para abrir arquivo de origem duvidosa sem correr risco.
O problema
Livro técnico costuma vir de fonte que ninguém auditou, e um PDF não carrega só texto: carrega JavaScript embutido, ação disparada na abertura e link de phishing. Abrir num leitor nativo é dar a um arquivo desconhecido acesso ao sistema. E ler pelo celular, que é onde sobra tempo, significava mandar o arquivo por e-mail para mim mesmo toda vez.
O que eu fiz
Um leitor web onde quem renderiza é sempre o PDF.js dentro do sandbox do navegador. A camada de scripting do PDF.js nunca é carregada — é o único caminho pelo qual o JavaScript de um PDF chegaria a rodar, e deixá-la de fora é omissão deliberada. Sem camada de anotação, link dentro do livro não é clicável. Os arquivos ficam fora de qualquer diretório estático e só saem por uma rota, então proteger essa rota basta.
Resultado
Leio pelo navegador do celular, com página, tempo e mapa de constância gravados sozinhos. O recorte automático de margem devolve ao texto os 12% a 15% de largura que um livro comercial gasta em margem, medindo uma vez por livro para a página não mudar de tamanho enquanto se rola. O acesso é por convite manual em linha de comando: não existe rota que crie usuário, então a garantia contra auto-cadastro é a ausência de código.
Stack
Uma decisão que se paga
Um livro de três mil páginas não cabe na memória de um celular. Todas as páginas existem como caixas vazias com a proporção certa — para a barra de rolagem não mentir — e só as próximas da tela ganham canvas de verdade. Ao sair de vista, zerar a largura do canvas libera o buffer na hora; só remover o nó deixaria a memória presa até o coletor de lixo passar.
O React cuida da casca e o desenho das páginas é imperativo. Reconciliar canvas a cada rolagem seria trabalho jogado fora.