Disco cheio não é drama de datacenter — é segunda-feira. PDFs baixados duas vezes, fotos copiadas de backup, vídeos repetidos em pastas de projeto. Eu queria ver o que era gêmeo, decidir com calma e mandar cópias para a Lixeira, sem ferramenta genérica que me assustasse ou exigisse confiança cega.
O Twice é a resposta modesta que construí para o meu Mac: Electron, React, varredura em worker e UI pensada no Figma. Este artigo conta o fluxo SDD + MCP Figma + conhecimento técnico que usei — e onde a IA entrou de forma intencional.
Fluxo Configurar → Escanear → Revisar (gravação local).
Configuração de pastas, exceções e categorias (PDF, fotos, vídeos, capturas).
1. O incômodo real
O problema é corriqueiro: espaço some, mas a culpa está espalhada em duplicatas sem rosto. Ferramentas existentes ou são opacas, ou empurram ação em massa sem revisão. Meu critério era simples — escanear pastas que eu escolho, comparar conteúdo (PDF, imagem, vídeo), mostrar grupos de gêmeos e só então mover cópias selecionadas para a Lixeira.
Isso já define restrições de produto: permissões no macOS, feedback de progresso honesto, pausa/cancelamento, telas de revisão antes de apagar nada. Nada disso pede “mais IA”; pede engenharia clara.
2. Spec antes do Electron
Antes de abrir o scaffold do Electron, escrevi o que o app deveria fazer em blocos verificáveis: fluxo Configurar →
Escanear → Revisar → Confirmar; tipos de arquivo; persistência em Application Support; critérios de
“original preservado” versus cópia descartável. SDD aqui não é documento corporativo — é contrato comigo mesmo e com o
agente de código.
Cada tarefa de implementação saía amarrada a essa spec: IPC nomeado (scan:start, progresso, conclusão),
estado na UI com Zustand, worker separado para não travar a interface. Quando a IA sugeria atalhos fora do escopo,
a pergunta era: “isso está na spec ou é feature creep?”
3. Figma MCP na prática
Quis consistência visual — vidro fosco, índigo de marca, dark mode — sem reinventar componente a cada tela. Usei
MCP Figma para puxar contexto de frames/protótipos e traduzir tokens (superfícies, tipografia Inter,
halos de loading) para CSS no app. O design-info.md do repositório virou ponte entre design e código.
Isso reduziu “vibe UI”: cores e espaçamentos deixam de ser palpite do modelo e passam a referenciar decisões visuais já revisadas. O custo é disciplina — atualizar Figma ou tokens quando a spec muda, não só pedir outro layout ao agente.
Revisão antes da Lixeira: grupos, filtros e preview — nada automático.
4. Arquitetura do app
Stack: Electron 34, electron-vite, React 19, TypeScript, processo main com orquestrador de scan, worker para hashing/comparação, preload tipado e build macOS via electron-builder. Não escolhi Electron por moda — escolhi porque o problema é desktop nativo (Lixeira, permissões de pasta, worker pesado) com UI rica que eu já domino em React.
O Twice não prova que sou “desktop engineer primeiro”; prova que consigo escolher a ferramenta certa, decompor o sistema (IPC, estado, scan, revisão) e entregar algo que uso no dia a dia.
Confirmação explícita: originais preservados, cópias recuperáveis pela Lixeira.
5. IA intencional (sem vibe coding)
Usei agentes para acelerar boilerplate, refinar componentes e explorar variantes — sempre com spec, diff revisado e teste manual nas pastas reais do meu Mac. IA boa neste case é copiloto com limite: não decide sozinha o que apagar, não inventa permissão de segurança, não substitui entendimento de worker ou IPC.
O resultado não é perfeito nem “startup de IA”. É um utilitário honesto, alinhado a um problema meu, construído com o mesmo rigor que levo a produtos maiores — só que aqui a equipe sou eu, o revisor também, e o usuário final acordo de manhã quando o disco respira de novo.