08/08/2026

TOIN.app: dezenas de ferramentas online gratuitas em 5 idiomas

Construí o TOIN.app com Astro e Claude Code: dezenas de calculadoras e conversores gratuitos, em cinco idiomas e com zero JavaScript na home. As ferramentas que mais gente procura, e os motores de cálculo testados contra as efemérides do USNO e o catálogo de eclipses da NASA.

TOIN.app: dezenas de ferramentas online gratuitas em 5 idiomas

Toda vez que eu precisava saber quantos dias faltavam pra alguma coisa, ou converter uma medida boba, eu caía num site cheio de pop-up, banner que pula e formulário pedindo cadastro pra calcular uma subtração de datas. É um tipo de página que existe há vinte anos e continua ruim.

Então construí o TOIN.app: ferramentas simples que fazem uma coisa bem feita, sem instalar nada, sem criar conta. O nome é a brincadeira de sempre, Toin de Toledo Interactive ou de "Incredible Tools", e o slogan resume a proposta: simple tools that do one thing well.

O site está no ar com dezenas de ferramentas, milhares de páginas e cinco idiomas, e sigo construindo novas sempre que possível.

Este post é o passeio completo: o que tem lá dentro, quais ferramentas as pessoas realmente usam, e o que existe por trás delas que justifica confiar no número que aparece na tela. Porque calculadora online é um mercado onde quase ninguém confere a conta, e eu descobri que conferir dá muito mais trabalho do que calcular.

O que tem lá dentro

As ferramentas estão organizadas em seis categorias, e cada categoria só existe porque consegue recusar alguma coisa. Explico isso melhor lá embaixo.

Datas

A categoria maior, e a que me fez começar o projeto. Tem calculadora de idade, dias entre datas, quantos dias até uma data qualquer, calculadora de dias úteis (com feriados nacionais por país), conversor de fuso horário, semana do ano, dia do ano e uma contagem regressiva com anéis de progresso em SVG.

Tem também a família de aritmética de relógio, que é surpreendentemente útil e surpreendentemente mal resolvida na internet: calculadora de horas, horas entre dois horários, somar e subtrair horas e que horas serão.

Astronomia

Minha categoria favorita, e a que mais deu trabalho. Fases da lua, nascer e pôr do sol, estações do ano (equinócios e solstícios) e eclipse lunar.

Nenhuma delas chama API. Os cálculos são implementações dos algoritmos do Meeus e do NOAA rodando no próprio navegador, testados contra as efemérides publicadas do USNO e contra o catálogo da NASA. Foi a parte do projeto em que eu mais aprendi, e é o assunto da segunda metade deste post.

Números

Calculadora de porcentagem, aumento percentual, diferença percentual, porcentagem de um valor, calculadora de desconto, calculadora de gorjeta, calculadora de fração, regra de três e sorteio aleatório.

A de frações faz aritmética racional exata, sem passar por ponto flutuante. A de gorjeta resolve o centavo que não divide, que é um daqueles detalhes que ninguém nota até dividir a conta entre sete pessoas.

Saúde

Calculadora de IMC na escala da OMS, calculadora de calorias por Mifflin-St Jeor (com a margem de erro declarada, porque ela existe), calculadora de ovulação e calculadora gestacional.

Finanças

Juros compostos, juros simples e simulador de financiamento com amortização Price e SAC.

Conversores

Comprimento, peso, temperatura, área, volume e o mais brasileiro de todos: álcool ou gasolina, que usa a eficiência do seu carro como parâmetro em vez de repetir a regra dos 70% como se ela valesse pra todo mundo.

As sete que mais gente procura

Essa lista não é por gosto meu. Ela vem de volume de busca medido (DataForSEO, ago/2026), cruzado com o que o site tem de fato no ar.

1. Eclipse lunar

A ferramenta mais procurada de todas, e a que quase virou um erro de escopo. O eclipse lunar mostra instantes e magnitude de cada eclipse, validados contra o catálogo da NASA.

Eu não faço eclipse solar, de propósito. Eclipse lunar é global: todo mundo no lado noturno da Terra vê o mesmo instante, então hora e magnitude são a resposta inteira. Eclipse solar tem faixa de totalidade de algumas centenas de quilômetros, e publicar o instante sem dizer onde promete muito mais do que a página entrega. Por isso a rota é /eclipse-lunar/ e não /eclipses/: nem a URL pode prometer demais.

2. Calculadora de porcentagem

Parece a ferramenta mais boba da lista e é uma das mais usadas. A calculadora de porcentagem tem irmãs separadas para aumento percentual, diferença percentual e desconto, porque cada uma dessas é uma pergunta diferente que as pessoas digitam de um jeito diferente.

3. Juros compostos

A calculadora de juros compostos é a única página do site que estourou o orçamento de JavaScript de propósito, e a explicação vale a pena.

O argumento inteiro da ferramenta é o mês em que os juros passam os aportes. Uma tabela de números não deixa isso visível, então precisa de gráfico. Só que a biblioteca de gráfico mais barata que achei custa 14 KB, e as que todo mundo usa primeiro custam de 60 a 130 KB. Desenhei o gráfico à mão em SVG: cerca de 600 bytes de lógica.

4. Simulador de financiamento

O simulador de financiamento faz amortização Price e SAC, que é o que a maioria dos simuladores brasileiros não separa direito.

Uma decisão que parece pequena e não é: existem duas tabelas de taxa no projeto, e trocar uma pela outra publicaria número errado em centenas de páginas. Uma é o que o dinheiro custa (crédito imobiliário, usado aqui). A outra é o que o dinheiro rende (renda fixa, usada nos juros compostos). No mesmo país são números diferentes e se movem por motivos diferentes. Elas não se chamam TAXA_A e TAXA_B, se chamam pelo que medem.

5. Contagem regressiva

A contagem regressiva tem anéis de progresso em SVG e conta pra qualquer data, com páginas prontas para as datas que as pessoas mais procuram.

6. Calculadora de IMC

A calculadora de IMC usa a escala da OMS, e é onde eu tive mais cuidado com linguagem, não com matemática.

Saúde é o assunto em que uma calculadora escorrega fácil pra tom de diagnóstico. A ferramenta afirma o número, a faixa da OMS em que ele cai, e qual intervalo de peso aquela faixa significa naquela altura. Ela não diz se a pessoa é saudável, nem o que deveria fazer. A faixa é nomeada como faixa ("peso normal"), nunca como pessoa ("você está normal"). A primeira descreve um intervalo numa tabela; a segunda descreve alguém.

Tem um detalhe de arredondamento que virou teste: o intervalo saudável arredonda pra dentro. A 1,50 m, o peso para IMC 18,5 é 41,625 kg, e arredondar pra 41,6 dá IMC 18,489, ou seja, a página anunciaria um intervalo e em seguida chamaria o próprio limite de abaixo do peso.

7. Celsius para Fahrenheit

O conversor de temperatura fecha a lista, e ele existe assim por causa da decisão de produto mais importante do projeto, que é o próximo assunto.

Vale citar ainda a mais brasileira do site: álcool ou gasolina, que usa a eficiência do seu carro como parâmetro, em vez de repetir a regra dos 70% como se ela valesse pra todo mundo.

Poucas ferramentas, muitas páginas

O número que mais confunde quem olha o projeto é esse. Como algumas dezenas de ferramentas viram milhares de páginas?

Porque uma ferramenta não é uma página com um dropdown. É uma página por coisa que as pessoas procuram.

Essa é a decisão de produto mais importante do projeto, e é fácil errar: construir um conversor com um <select> de categoria parece mais organizado e é estritamente pior. Ninguém pesquisa "conversor de unidades" tanto quanto pesquisa "celsius para fahrenheit". Um hub com dropdown compete por um termo genérico; páginas separadas competem por termos específicos, cada uma com conteúdo próprio.

Some a isso os parâmetros na URL. Uma página tipo /calculadora-de-idade/nascido-em-1990/ chega com a ferramenta já preenchida e a resposta já na tela, e a URL é compartilhável, linkável e indexável. Cada parâmetro curado vira uma página de cauda longa a mais. Multiplique por cinco idiomas e você chega nos milhares, divididos quase igualmente entre eles.

Cinco idiomas, e por que esses cinco

Inglês na raiz, e /pt/, /es/, /de/, /fr/ como espelhos completos. Não são traduções automáticas jogadas por cima: as URLs também são localizadas, então a calculadora de idade é /age-calculator/ em inglês e /pt/calculadora-de-idade/ em português. Quem procura em português encontra uma URL em português.

A escolha dos idiomas não foi por população. Foi por RPM de publicidade: os mercados tier-1 pagam algo como 10× o RPM brasileiro, então inglês vem primeiro, depois alemão e francês. A Índia é a rejeição mais instrutiva da lista: país mais populoso do mundo, RPM de 5 a 10 vezes menor, e os cerca de 200 milhões de usuários que navegam em inglês já chegam pelo site em inglês mesmo.

Uma consequência bem concreta disso está no código: cada widget carrega só os textos do próprio idioma. A ferramenta de fases da lua nasceu com 14,2 KB de JavaScript porque importava o mapa de textos das cinco línguas, ou seja, a página em inglês baixava as oito descrições de fase em alemão, francês, espanhol e português. Nenhum bundler elimina isso sozinho. Hoje está em 4 KB.

A stack

Astro 7 gerando site estático, TailwindCSS 4, deploy em Cloudflare Workers. E sim, JavaScript vanilla, que é só o jeito chique de dizer "JavaScript puro, sem framework": não tem React, não tem Vue, não tem nada. Cada ferramenta é um punhado de JavaScript próprio que roda no navegador.

Isso não é purismo, é orçamento. A meta é menos de 5 KB de JavaScript próprio por página, e a maioria das ferramentas cumpre com folga: calculadora de idade em 1.771 bytes, IMC em 2.493, semana do ano em 2.427. A home despacha zero JavaScript.

Medido em produção, antes de qualquer anúncio entrar:

MétricaMedidoMeta
LCP72 ms< 1,5 s
CLS0,00< 0,1
TTFB3 ms< 800 ms
JS próprio (página de ferramenta)3.781 B< 5 KB

Toda a matemática vive em módulos puros e testados: date-engine, moon-engine, sun-engine, eclipse-engine, finance-engine, fraction-engine e por aí. Separar o cálculo do componente é o que permite testar fase da lua contra efeméride publicada sem abrir um navegador.

Abrindo o capô: a parte que ninguém confere

Agora a pergunta que interessa: como eu sei que essas contas estão certas?

As quatro ferramentas de astronomia (fases da lua, nascer e pôr do sol, eclipse lunar e estações do ano) são as mais difíceis de validar, e por isso viraram o padrão de rigor do projeto inteiro.

Efeméride não é dado dinâmico: a lua cheia de fevereiro de 2026 é a mesma hoje e daqui a dez anos. É função matemática, e chamar rede pra buscar resultado de função pura é desperdício.

O problema é que "parece certo" não significa nada. O erro clássico é escrever o teste a partir da própria implementação: rodar o código, ver que dá 2026-02-01 22:09, e cravar isso no teste. Esse teste passa pra sempre e só prova que o código não mudou, não que ele está certo. Se eu transcrevi um coeficiente errado, o teste memoriza o erro e defende ele.

Então a validação é contra fonte externa e independente: o US Naval Observatory, o feed de calendário lunar do Google como segunda opinião, e o catálogo de eclipses da NASA (Espenak e Meeus). O motor bate com as duas primeiras em 204 fases entre 1977 e 2027, dentro de 2 minutos, tipicamente abaixo de 30 segundos.

O teste que só vale se ele falhar

A disciplina que mais rendeu: depois que a suíte fica verde, eu introduzo o bug clássico de propósito e confiro se algum teste quebra.

Nas fases da lua, mudar um dígito de um coeficiente derruba 16 testes. Ótimo. Mas nas estações do ano, trocar dois coeficientes derrubou um teste só, e um teste é pouco pra erro de transcrição, que é justamente o que se comete copiando tabela de livro.

O caso mais instrutivo nem é astronomia. No sorteio aleatório eu apliquei o erro clássico do Fisher-Yates e a suíte continuou verde. Dois testes deixaram passar: um verificava que todas as 24 permutações de quatro elementos aparecem, e aparecem mesmo, só que algumas com o dobro da frequência. O outro contava chamadas ao gerador, idêntico nos dois casos. O que pegou foi contar a distribuição: 6 6 6 6 6 6 no correto contra 8 8 4 4 8 4 no bugado.

Três armadilhas que custaram tempo

ΔT não é monotônico. A diferença entre tempo terrestre e universal parece só crescer, mas cai até cerca de −2,8 segundos por volta de 1900 antes de subir de novo. Quem ajusta uma parábola só erra o sinal.

Fase da lua não é fração de lunação. A tentação é interpolar: lua nova em 0, próxima em 1, cheia em 0,5. Errado, porque a lua anda mais rápido perto do perigeu. A cheia de agosto de 2026 cai em 0,525, e esse desvio colocava o quarto minguante com 42,6% de iluminação em vez de 50%, chegando a nomear a fase errada.

Nascer do sol precisa da atmosfera. Não é quando o centro do disco cruza o horizonte, é quando a borda superior aparece, e a refração levanta a imagem cerca de 34 minutos de arco antes. Tirar essa correção derruba 13 testes. E null é resposta válida duas vezes: acima do círculo polar, o mesmo null significa sol da meia-noite em junho e noite polar em dezembro, então o retorno diz qual dos dois é.

Onde o método acaba, é melhor admitir

O capítulo 54 do Meeus é uma série truncada, não uma efeméride completa. Perto da magnitude zero, o erro residual decide o resultado sozinho: o penumbral rasante de 18/07/2027 tem magnitude +0,006 no catálogo da NASA e sai −0,006 aqui.

Eu poderia baixar o limiar pra "achar" esse. Não fiz, porque baixar o corte encontraria esse e passaria a inventar outros, e uma página anunciando eclipse que ninguém vê é pior que uma listagem discretamente incompleta. A ausência está documentada e tem teste fixando ela, pra ninguém "consertar" afrouxando o número depois.

O bug que o projeto inteiro existe pra não ter

A calculadora de idade originou tudo, e ela tem a armadilha que quase todo site erra.

Um <input type="date"> devolve, no valueAsDate, a meia-noite em UTC. Se você calcular idade pela diferença de milissegundos, o resultado sai um dia errado pra todo mundo a oeste de Greenwich, o que inclui o Brasil inteiro e as Américas inteiras.

A correção é não fazer aritmética de data com timestamp: o motor trabalha com componentes de calendário (ano, mês, dia) como inteiros, lendo a string 'YYYY-MM-DD' direto do campo.

Mesma lógica no conversor de fuso horário: ele não implementa fórmula nenhuma, porque o navegador já conhece as regras da base IANA. E nunca guardo diferença entre duas cidades, porque "São Paulo está três horas atrás de Londres" é verdade em janeiro e mentira em julho: o Brasil acabou com o horário de verão em 2019 e o Reino Unido não.

A suíte inteira roda em menos de dois segundos e faz parte do comando de build no deploy. Regressão no motor de datas não derruba nada: ela publica. O site continua no ar, bonito, calculando errado. Esse gate é a única coisa entre um coeficiente trocado e a produção.

O nome saiu de uma conversa no Claude Desktop

Antes de escrever uma linha de código eu precisava do domínio, e eu já tinha dois candidatos meus na mesa: toin.app e tointools.com. Joguei os dois no Claude Desktop pedindo mais ideias, com uma referência meio esquisita de propósito: queria algo na linha de Google, Uber, iFood, OLX, Buscapé, nomes que funcionassem no Brasil e fora dele ao mesmo tempo.

Veio uma lista grande, dividida por estratégia. Inventados curtos (zumo.tools, piko.tools, vixo.app, nubo.tools), nomes com sentido de kit ou ferramenta (kitto.app, utilo.app, caixa.tools), palavras reais que funcionam em português, espanhol e inglês (pronto.tools, nexo.tools, lume.app) e uns bem brasileiros que eu descartei na hora (faztudo.com.br, jeitinho.app, ferramentinha.com.br), porque um site que ia nascer em cinco idiomas não podia ter nome que só faz sentido aqui.

O útil não foi a lista, foi o veredito sobre o que eu já tinha. Entre os meus dois, toin.app ganhou de tointools.com por três motivos: é curto, não significa nada (o que é uma vantagem, e não um defeito, como Google demonstrou) e é pronunciável em português e inglês. O tointools.com é composto, mais longo e só funciona em inglês.

Duas ressalvas vieram junto, e são as que eu ainda carrego. .app obriga HTTPS, o que não custa nada, mas tem menos confiança de clique numa SERP brasileira do que um .com. E .tools é barato e disponível, só que ninguém digita direto, o que só não importa porque esse é um projeto de SEO puro, onde o tráfego chega pela busca e não pela barra de endereço.

É um uso de IA bem diferente do resto do projeto: não escreveu código nenhum, só me impediu de escolher o nome pior por conta própria.

Construído com Claude Code

O site inteiro foi construído com Claude Code, e a parte que fez diferença não foi gerar componente: foi o CLAUDE.md do projeto. Ele tem centenas de linhas, e quase nada ali é instrução de estilo. É decisão de produto com o custo anotado junto: por que a categoria se chama astronomy e não space, por que numbers e não math, por que o bloco de ferramentas relacionadas mostra seis e não todas.

Esse último é meu exemplo favorito de armadilha. O componente listava todas as ferramentas menos a atual. Correto quando eram onze. Conforme a lista cresceu, virou 24 cards e 8,4 KB, 18% do HTML de toda página, mais que todo o JavaScript do site. Ninguém decidiu isso: a ausência de um limite decidiu por todo mundo. Já escrevi por aqui sobre como o CLAUDE.md carrega o contexto do projeto, e o TOIN foi onde essa ideia mais rendeu, justamente porque as decisões ficaram escritas com o motivo, não só com a regra.

Outro detalhe que o Astro cobrou: trailingSlash e formato de build precisam combinar, ou o Cloudflare te dá um 308 em toda URL interna. Isso me mordeu antes, e documentei a combinação que funciona.

Resumo

  • TOIN.app: dezenas de calculadoras e conversores gratuitos, sem cadastro e sem instalação.
  • Seis categorias: datas, astronomia, números, saúde, finanças e conversores.
  • Milhares de páginas em cinco idiomas, com URLs localizadas em cada um.
  • Astro 7 estático, Tailwind 4, JavaScript puro, Cloudflare Workers.
  • Uma página por variação de busca, com parâmetro na URL e resposta já preenchida na chegada.
  • Menos de 5 KB de JavaScript próprio por página; home com zero.

E o que eu levo desse projeto pra qualquer código de cálculo:

  1. Teste contra fonte externa, nunca contra a própria saída do código.
  2. Duas fontes independentes valem muito mais que uma.
  3. Injete o bug de propósito e veja se a suíte pega. Se não pegar, o teste é decorativo.
  4. Quando o método tem limite, escreva o limite e fixe com teste, em vez de calibrar o número até o resultado ficar bonito.

Se você tem um cálculo chato que faz sempre no papel ou numa planilha, ou ainda alguma ferramenta que sente necessidade, me conta. É exatamente assim que a lista cresce.

Referências

#astro #ferramenta #seo #ia

Tags

Se eu te ajudei de alguma forma e você quiser retribuir, pode me pagar um café ☕ ou ainda usar um dos meus links de indicação para abrir conta em serviços como Asaas, Bunny, Clara, assinar conteúdos gratuitos ou usar serviços recomendados.

Você pode me encontrar no: Github, Behance, LinkedIn, YouTube, Instagram, X ou por email hello@marciotoledo.com!

© 2002 - 2026 | Marcio Toledo. Todos os direitos reservados. For LLMs