Como aprendi com os erros do meu game para criar um editor de imagens "escalável" (Electron + React)
Oi pessoal! Este é o meu segundo post aqui e queria contar como a frustração de "bater no teto" com ferramentas e algoritmos antigos me levou a construir o OpenCreate Forge.
Se você já desenvolveu algo maior que um "Todo List", sabe do que estou falando: você começa com uma ideia simples, o código flui, mas de repente o projeto cresce e aquela solução "elegante" do início vira o seu pior pesadelo.
1. O Trauma: A lição do "ALONE"
Eu havia compartilhado minha experiência com o meu jogo, o ALONE. Lá, eu sofri muito com o sistema de eventos. Começou com uma variável int, passou por um Object (que corrompia saves) e só no "Omega" virou um Array de strings versátil.
Essa dor me ensinou uma lição valiosa: Estado é tudo.
Se você não tem uma fundação sólida para gerenciar como os dados fluem, você vai passar mais tempo consertando o passado do que criando o futuro. E foi com essa mentalidade que decidi enfrentar um dos maiores "chefões" do desenvolvimento web: um editor de imagens profissional.
2. A Evolução: Por que um novo editor?
Sempre usei ferramentas de edição de imagens, como Photoshop, Photopea, Krita e GIMP. Mas sempre senti que havia um abismo entre o "web dev" e o "creative pro". Ou a ferramenta é pesada e fechada, ou é leve mas falta poder. Eu queria algo que fosse:
- Open Source de verdade: Para que qualquer dev pudesse estender.
- Tecnologia de Ponta: Usar o que há de mais novo para não nascer com "dívida técnica".
Foi assim que nasceu o OpenCreate Forge.
3. O "Omega" do Forge: A Stack e o Motor
Desta vez, não quis cometer os mesmos erros. Em vez de variáveis soltas, foquei em uma arquitetura que aguenta o tranco:
- Electron: Para ter acesso ao sistema de arquivos e recursos nativos, sem abrir mão da flexibilidade da web.
- React & Tailwind: Estou usando as versões mais recentes para garantir que o projeto seja moderno por anos. O Tailwind, em especial, limpou muito o meu CSS.
- Zustand (O sucessor das gambiarras): Para evitar o caos que tive no meu game, usei o Zustand para gerenciar camadas, ferramentas e histórico de forma atômica e performática.
- ForgeEngine (O Canvas customizado): Não é só um
<canvas>solto. Desenvolvi um motor que lida com transformações em tempo real, hierarquia de camadas (Raster e Texto) e renderização otimizada.
4. Desafios Atuais
O maior desafio hoje não é mais "adicionar o evento 30", mas sim manter a performance quando temos 50 camadas com filtros e transformações aplicadas. O Forge já salva e carrega arquivos nativos .ocfd (JSON-based), e tem as ferramentas essenciais, como (em ordem) o Move, Select, Transform, Crop, Brush, Pencil, Eraser e Text.
Pergunta para a comunidade:
Para quem já mexeu com Electron ou manipulação pesada de Canvas: qual foi a barreira que vocês sentiram quando a performance da web começou a gargalar? E como vocês lidaram com o "Undo/Redo" de grandes massas de dados? Pois atualmente o Canvas usa getContext("2d") e toDataURL().
Vou ler todos os comentários.
Qualquer feedback é bem-vindo.
Agradeço desde já pela leitura!
Repositório para quem quiser bisbilhotar o código: https://github.com/gabrielborgesweb/opencreate-forge