O Problema com a Stack SaaS Tradicional
Antes de escolher a stack, levantamos o custo mínimo de um SaaS brasileiro rodando em infraestrutura convencional. Isso significava queimar R$ 300 antes de saber se o modelo funcionava. Além disso, a latência era um problema específico do Brasil, com usuários do Norte e Nordeste tendo experiências ruins, especialmente em conexões móveis. Uma CDN ajudou, mas adicionou custo.
A Stack que Escolhemos (e Por Que)
Cloudflare Workers como Edge Runtime
A base da aplicação é o Cloudflare Workers, um runtime serverless que executa código em mais de 330 data centers ao redor do mundo, incluindo pontos de presença no Brasil (São Paulo, Rio de Janeiro, Fortaleza). O código roda no data center mais próximo do usuário, mantendo uma latência de menos de 50ms para usuários brasileiros. Workers mantém um runtime aquecido, diferente de funções Lambda que congelam entre execuções. A primeira requisição é tão rápida quanto as seguintes. Se o produto viralizar e 10 mil pessoas acessarem ao mesmo tempo, o Workers distribui automaticamente.
Hono como Framework HTTP
O Hono é um framework HTTP que roda dentro do Workers sem overhead. Ele é menos de 14KB, roda nativamente em Workers, Deno, Bun e Node.js, e é TypeScript-first com inferência de tipos forte. Suporta middleware, routing params e validação com Zod.
Decisão de Banco
Para uma aplicação que precisa persistir propostas, usuários e configurações, o modelo relacional ainda é o mais natural. Examinamos duas opções no ecossistema edge: D1 (Cloudflare) e Turso. Optamos pelo D1 pela integração nativa com Workers. Você define o schema localmente, executa as migrações com wrangler d1 migrations apply, e as queries rodam no mesmo data center que o Worker. D1 não suporta todas as queries SQLite. ALTER TABLE com constraints complexas, RETURNING e algumas funções de janela não estão disponíveis. Teste com wrangler dev antes de subir. A latência de escrita é maior que a de leitura. O plano free prioriza consistência eventual. Para propostas comerciais, isso é irrelevante. Migrations funcionam, mas alterações em tabelas com muitos dados exigem planejamento. Muitos acessos com muita escrita podem ser necessários para fazer alguma distribuição com filas ou cache com key-value.
Conclusão
Com o Propoza, aprendemos a estruturar um SaaS no edge com Cloudflare Workers e D1 para custos mínimos. A latência foi reduzida, e a integração com Workers tornou a implementação mais fácil e eficiente. A escolha do Hono como framework HTTP e D1 como banco de dados foram decisões fundamentais para manter um SaaS de baixo custo no edge.
Trade-Offs
Workers não é Node.js
Workers não é Node.js. Não tem acesso ao sistema de arquivos, WebSocket nativo, nem a biblioteca padrão do Node. É um runtime V8 isolado. Quase tudo que você precisa existe como API nativa (fetch, Web Crypto, streams), mas bibliotecas que dependem de fs ou net não funcionam.
D1 não suporta todas as queries SQLite
D1 não suporta todas as queries SQLite. ALTER TABLE com constraints complexas, RETURNING e algumas funções de janela não estão disponíveis. Teste com wrangler dev antes de subir.
Migrations e acessos com muita escrita
Migrations funcionam, mas alterações em tabelas com muitos dados exigem planejamento. Muitos acessos com muita escrita podem ser necessários para fazer alguma distribuição com filas ou cache com key-value.
Com o Propoza, aprendemos a estruturar um SaaS no edge com Cloudflare Workers e D1 para custos mínimos. A latência foi reduzida, e a integração com Workers tornou a implementação mais fácil e eficiente. A escolha do Hono como framework HTTP e D1 como banco de dados foram decisões fundamentais para manter um SaaS de baixo custo no edge. Ainda assim, existem trade-offs que precisam ser considerados para garantir a eficiência e a funcionalidade do SaaS no edge.