Pitch: Construí um portal com ferramentas online sem nenhum backend
Fala pessoal, vim aqui compartilhar um projeto/produto que criei, um portal internacional de ferramentas online gratuitas chamado Kastavo.
A ideia do Kastavo nasceu com o objetivo de ajudar algumas pessoas e a mim também, pra ter um local seguro pra realizar algumas tarefas importantes, como comprimir uma imagem, por exemplo. Sempre tive um medo de baixar um arquivo, e encher meu PC de vírus - ainda mais que uso ele pra programar e tal.
A decisão que define o projeto: zero backend, tudo roda no navegador. Não tem nenhuma rota de servidor. Isso me dá duas coisas, a primeira é a privacidade real, ou seja, o arquivo do usuário nunca sai do dispositivo dele e a outra é o custo zero pra processar, mesmo se o tráfego crescer.
Quis englobar várias categorias nele, desde calculadoras simples até financeiras, ferramentas de dev, validadores, conversores pra pdf e outras ferramentas.
Vou compartilhar algumas coisas que fiz nele que achei interessante, e alguns perrengues que passei.
Pra mexer com PDF protegido, uso o QPDF compilado pra WASM. Dois comportamentos aconteceram e não estavam documentados em lugar nenhum: a função principal lança o código de erro em vez de retornar, e a única forma de capturar o log de texto era trocar o console.log global antes de inicializar o módulo. Só descobri testando o módulo compilado na mão — lendo os tipos não dava pra saber.
Outra coisa é que componentes que geram valor aleatório como senha e UUID, geravam um
valor no servidor e outro no cliente no primeiro render. Como os dois não batiam, o React descartava a árvore e re-renderizava. Só apareceu testando num navegador de verdade — nem o TS nem os testes unitários pegam esse tipo de coisa. Foi o que me mostrou que não dá pra confiar só nos testes automatizados, teve muito teste manual pra caçar bug assim.
Um problema que encontrei no meio do caminho foi o XSS - Cross-Site Scripting. No começo achei que não me atingiria por não ter servidor nem banco, mas entendi que é meio o contrário: como tudo roda no navegador e eu manipulo o que o usuário digita, XSS (injeção de JS) é a classe de bug que faz sentido eu me preocupar, e não por exemplo, um SQL injection. Como não tenho login nem dados de outros usuários, o impacto é limitado, mas mesmo assim foi bom entender e tomar cuidado com como renderizo o input.
Não é um produto perfeito, mas como meu primeiro projeto pessoal lançado, com domínio comprado e hospedagem e tudo mais, achei bem legal e aprendi bastante, um portal que demorei uns 2 meses pra fazer, com dias de configuração pra lançar e mais alguns deploys na correria corrigindo o
que aparecia.
Hoje tem 85 ferramentas em 3 idiomas, e pretendo continuar adicionando ferramentas úteis e corrigindo o que for encontrando.
Tá no ar em kastavo.com — qualquer feedback é muito bem-vindo: sugestão, crítica, e bug
também.
Sintam-se a vontade em usar o Kastavo!