
Projeto independente
Esoteric Numbers
Uma plataforma de numerologia em 67 idiomas que trata um nicho cheio de paywalls e barreiras de email com verdadeira seriedade de produção, gratuita, privada e bem engenheirada.
Visitar o projetoComeçou com um livro de numerologia e uma noite preguiçosa. Cansei-me de fazer os exercícios à mão e escrevi um programa que os fizesse por mim. Desde então, nunca mais parou de crescer.
Atlantic Forge
O que estava em jogo
O Esoteric Numbers começou com um livro e uma noite preguiçosa. Estava a ler sobre numerologia e a fazer os exercícios à mão, a transformar nomes e datas de nascimento em números, até a repetição deixar de ter graça. Fiz então o que os engenheiros fazem quando uma tarefa se torna mecânica: escrevi um pequeno programa de terminal para correr os cálculos por mim. Depois dei-lhe uma interface simples, só para o tornar mais visual. E algures nesse caminho, o projeto deixou de ser para mim.
Porque eu já tinha visto o que existia. As plataformas disponíveis eram caras para o leitor e difíceis de percorrer: sites datados, leituras mantidas reféns de um endereço de email ou de um paywall, e nenhuma palavra sobre o que acontece ao nome e à data de nascimento que lá escrevemos. Se eu queria estes cálculos, outras pessoas também queriam, e nada dizia que tivessem de pagar a um porteiro por aritmética. O objetivo definiu-se sozinho: uma plataforma gratuita na sua essência, honesta quanto à privacidade, fácil de navegar e construída para chegar ao maior número de pessoas possível.
Se um site pede o seu nome e a sua data de nascimento, deve-lhe encriptação, não uma barreira de email.
A decisão
A parte pouco convencional foi recusar tratar um nicho “divertido” de forma leviana. O Esoteric Numbers está engenheirado como um produto com algo a perder: dados pessoais encriptados em repouso, contas protegidas por OAuth e autenticação de dois fatores, pagamentos através do Stripe em vez de um checkout improvisado, e observabilidade completa do browser aos trabalhos em segundo plano, para que uma só pessoa o possa operar como deve ser e saber, em vez de esperar, que está saudável.
Algumas calculadoras depois, a leitura honesta era que a plataforma ainda estava aquém do seu potencial. Chegar às pessoas, de forma sustentável, não é um desejo; é um problema de engenharia, e a resposta foi a camada de tradução. Sessenta e sete idiomas não é um projeto que se encomenda uma vez; é um fardo de manutenção que se agrava a cada alteração de conteúdo. Por isso a plataforma mantém-se a si própria: um modelo de linguagem a correr em hardware local ajuda a traduzir o conteúdo novo e a manter todos os idiomas atualizados à medida que as calculadoras evoluem. Sem avença de agência, sem fatura de API à palavra, e sem nenhum idioma a apodrecer em silêncio.
O alargamento continua: um blog, e a cobertura de tradições de numerologia de todo o mundo, o passo de uma calculadora para uma referência.
O que entregámos
Um SaaS de produção completo. Um front-end em Nuxt 4 comunica com um back-end em Django através de GraphQL, assente em PostgreSQL. O trabalho em segundo plano corre em Celery, com RabbitMQ e Redis. Os relatórios em PDF são gerados por um serviço dedicado, e todo o sistema é vigiado pelo Sentry e pelo New Relic. Dezenas de calculadoras em várias tradições de numerologia, todas gratuitas.
A stack, e porquê
Django, em vez de um back-end em JavaScript. As partes desta plataforma que podiam realmente magoar alguém, pagamentos, autenticação, dados pessoais encriptados, são problemas resolvidos e auditados no ecossistema do Django. A integração com o Stripe, o OAuth, a autenticação de dois fatores e a encriptação ao nível do campo têm bibliotecas maduras e postas à prova. Reconstruir essa superfície de segurança de raiz numa stack Node teriam sido semanas de trabalho para chegar a algo menos comprovado. O Python é também uma casa confortável para a lógica das próprias calculadoras, dezenas de sistemas numerológicos que são, no essencial, aritmética cuidadosa sobre nomes e datas.
GraphQL, em vez de REST. Dezenas de calculadoras multiplicadas por 67 idiomas significam centenas de necessidades de dados ligeiramente diferentes. Em REST, isso torna-se ou uma proliferação de endpoints ou alguns endpoints inchados que trazem dados a mais em cada pedido. Um único schema GraphQL tipado permite que cada página peça exatamente o que apresenta, e o contrato entre front-end e back-end é verificado em vez de lembrado.
Nuxt, em vez de uma SPA renderizada no cliente. Toda a história de aquisição é pesquisa orgânica em 67 idiomas. Uma SPA renderiza o conteúdo depois de o crawler já ter partido; o Nuxt renderiza as páginas de cada idioma no servidor, com routing i18n adequado, para que cada língua seja um site de pleno direito, indexável. A alternativa era a invisibilidade exatamente nas pesquisas que a plataforma existe para responder.
O que mudou
- Os visitantes leem na sua própria língua, em 67 idiomas, sem barreiras de email pelo caminho
- Os dados pessoais estão encriptados e protegidos por 2FA, num espaço que não oferece nem uma coisa nem outra
- Pagamentos, trabalhos em segundo plano e observabilidade correm como em qualquer sistema de produção sério
- O pipeline de tradução mantém-se a si próprio com um modelo local, para que o alcance não decaia

