Skip to content

luizhanauer/pdf-composer

Repository files navigation

📄 PDF Composer

Motor de orquestração, extração e composição de documentos PDF com execução 100% local.

Vue.js TypeScript Tailwind CSS Vitest


O PDF Composer é uma aplicação web focada em privacidade e performance. Ela permite que os usuários extraiam páginas de múltiplos arquivos PDF simultaneamente, insiram imagens (PNG/JPG) e construam um documento final completamente novo orquestrando a ordem de leitura em uma linha do tempo visual.

Toda a manipulação, extração e renderização ocorre localmente no navegador do usuário utilizando Web Workers, garantindo que nenhum dado seja enviado para servidores externos.

✨ Funcionalidades

  • 🔒 Privacy-First (Zero Server): Processamento 100% client-side. Seus documentos nunca saem da sua máquina.
  • 🗂️ Orquestração Multi-Documento: Extraia páginas de diferentes PDFs ao mesmo tempo e manipule-as como blocos individuais.
  • Alta Performance: Leitura de miniaturas e compilação de binários delegadas para threads secundárias (Web Worker), mantendo a interface fluida.
  • 🖱️ Drag & Drop Reativo: Interface moderna que permite arrastar, inserir e reordenar visualmente as páginas na linha do tempo antes da geração do PDF final.
  • 🎨 Neon UI / Dark Mode: Design moderno focado em conforto visual (Vermelho Neon) e clareza de interações.

🏗️ Princípios de Engenharia e Arquitetura

Este projeto não é apenas uma ferramenta útil, mas também um laboratório de boas práticas de engenharia de software:

  • Clean Architecture & DDD: O domínio de manipulação de PDF (tipos, entidades, contratos e serviços do Web Worker) é estritamente isolado da camada de apresentação (Vue/UI).
  • Object Calisthenics (No Else / Small Files): O fluxo lógico é desenhado para evitar ramificações condicionais desnecessárias (else), resultando em um código mais limpo, previsível e fácil de manter, dividido em arquivos de responsabilidade única.
  • Boundary Protection & Domain Integrity: Uso rigoroso do TypeScript Strict Mode e proteção de mutabilidade de memória (prevenção de detached buffers) ao trafegar dados entre a Main Thread e o Web Worker.
  • Test-Driven Development (TDD): Cobertura de testes unitários (100%) garantindo o comportamento e a resiliência da interface gráfica e das regras de negócio usando Vitest.

🚀 Como Executar o Projeto Localmente

Pré-requisitos: Node.js v18+ (Desenvolvido e homologado em ambiente Ubuntu 24.04).

  1. Clone o repositório:
git clone https://github.com/luizhanauer/pdf-composer.git
cd pdf-composer
  1. Instale as dependências:
npm install
  1. Inicie o servidor de desenvolvimento:
npm run dev
  1. Acesse em seu navegador (confira a porta no terminal):
http://localhost:5174/

🧪 Rodando os Testes

Para executar a suíte completa de testes com checagem de integridade estrutural e geração do relatório de cobertura global:

# Executa testes em modo watch
npm run test

# Executa testes com interface visual no navegador
npm run test:ui

🛠️ Tecnologias Utilizadas

  • Vue 3 (Composition API / Script Setup): Framework reativo de interface.
  • Vite: Build tool ultrarrápido.
  • Tailwind CSS v4: Estilização utilitária e criação do Design System Neon.
  • pdf-lib: Motor robusto de manipulação de binários PDF via TypeScript.
  • pdfjs-dist: Engine baseada em Canvas para renderização assíncrona das miniaturas.
  • Vitest + Vue Test Utils: Framework de testes e asserções.

Contribuição

Contribuições são bem-vindas! Se você encontrar algum problema ou tiver sugestões para melhorar a aplicação, sinta-se à vontade para abrir uma issue ou enviar um pull request.

Se você gostou do meu trabalho e quer me agradecer, você pode me pagar um café :)

Buy Me A Coffee

Licença

Este projeto está licenciado sob a Licença MIT. Consulte o arquivo LICENSE para obter mais informações.


Desenvolvido por Luiz Hanauer.

About

🗃️ Ferramenta web local-first para mesclar, extrair e reordenar páginas de PDFs e imagens via drag-and-drop. Construído com Vue 3, TypeScript e Web Workers.

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors