Stack tecnológico da cutty.dev — escolhas conscientes
O que está por trás do cutty.dev e porquê. Sem evangelismo — filosofia: uma stack chata e estável, alojamento na UE e privacidade integrada na arquitetura, que uma única pessoa é capaz de manter.
A maioria das postagens "meu tech stack" são uma lista orgulhosa de novidades. Veja, eu tenho isto, eu tenho aquilo, e aqui está uma biblioteca fresquinha da semana passada. Este será diferente.
A verdade é que, quando você gerencia um projeto sozinho, não procura o mais moderno. Você procura algo que não te acorde às três da manhã. E é exatamente disso que se trata toda essa stack tecnológica cutty.dev: tediosa em vez de moderna, europeia em vez de americana, privada desde a base, e simples o suficiente para que um par de mãos consiga dar conta.
Vou explicar passo a passo, como se estivesse te explicando isso tomando um café.
Astro renderizado no servidor (e por que não algo "mais legal")
cutty.dev é um Astro com renderização no lado do servidor. Cada requisição passa pelo servidor, monta a página e retorna o HTML pronto. Tedioso? Exatamente esse é o objetivo.
Eu queria três coisas: renderização no servidor sem maquinário pesado, suporte decente a vários idiomas prontamente, e velocidade sem sobrecarga. O Astro oferece tudo isso, e o código permanece legível. Quando volto para ele após dois meses de pausa, eu sei exatamente o que está acontecendo ali. Em um projeto solo, isso vale mais do que qualquer plugin da moda que ninguém mais suporta depois de um ano.
Um único arquivo em vez de um banco de dados com fogos de artifício
SQLite. Um banco de dados, um arquivo no disco. Além disso, uma camada de consultas conversando com TypeScript, então quando eu mudo a estrutura de dados, o erro aparece no meu editor, e não em produção à meia-noite.
Por que exatamente isso? cutty é "read-heavy". Alguém clica num link encurtado, nós fazemos a leitura e incrementamos o contador. Só isso. O SQLite aguenta esse tráfego tranquilamente, até números realmente grandes por dia. E o backup? Você copia o arquivo. Fim. Sem cerimônias de replicação, sem scripts que ninguém lembra como funcionam.
Aqui, tome cuidado com uma coisa, pois esta é uma armadilha comum: as pessoas ouvem "SQLite" e pensam "um brinquedo para um projeto de faculdade". Não é verdade. Menos partes móveis significa menos coisas que podem dar errado. Isso não é economizar na qualidade, é uma decisão consciente.
O servidor está na Europa e isso não é por acaso
Servidor dedicado na UE. Próprio TLS, reverse proxy com HTTPS automático, aplicação em contentores.
Este é o fundamento de como a cutty lida com os dados. Eu sei exatamente onde eles residem fisicamente (para clientes da UE e GDPR, isso não é uma curiosidade, mas sim uma condição), não estou preso a um único fornecedor, nada vaza automaticamente para além-mar, e a fatura é previsível em vez de oscilar junto com o tráfego.
Sim, plataformas convenientes do Ocidente permitiriam um início mais rápido. Você clica, faz o deploy, funciona. Só que você paga por isso com o local onde os dados dos seus usuários pousam. Para mim, foi um mau negócio.
Traduções faça seu próprio modelo, em sua própria casa
cutty fala 25 idiomas. Isso é traduzido por um modelo de IA local e aberto, que roda na minha infraestrutura. Não envio texto da interface para nenhum provedor externo.
Os benefícios são práticos. Uma única tradução custa zero. Tenho controle total sobre a qualidade e posso atualizá-la quando quiser. E a máquina sempre precisa de um olho humano, então cada uma dessas 25 línguas passou por uma revisão. Mas o fato de eu fazer isso por conta própria significa que a privacidade não é um item na tabela de preços. É uma propriedade de como tudo foi construído.
Tailwind, containers e algumas decisões menores
Estilo? Utility-first, ou seja, Tailwind. Sem CSS-in-JS, sem arquivos de estilos separados, tudo diretamente nos templates. Não perco tempo inventando nomes de classes, estilos não utilizados de qualquer forma não chegam à página final, e o design faz sentido porque o próprio sistema exige isso. Para uma única pessoa, cada minuto não desperdiçado com bobagens conta.
A implementação é o Docker. O mesmo ambiente localmente e em produção, o fim do "na minha máquina funcionava". E se algum dia for necessário, movo tudo para outro servidor em cerca de meia hora. A portabilidade é uma forma silenciosa de independência.
O que eu aprendi com isso
A stack entediante vence. Astro, SQLite, Tailwind, containers. Tudo maduro, testado e documentado. Nada quebra no momento em que você menos precisa.
A hospedagem na UE está pronta para produção, de verdade. A ideia de que "você precisa ir para a grande nuvem americana para ser levado a sério" é um mito. O IA local também é real, não é necessário entregar dados a uma API externa para ter traduções decentes. E a última coisa: uma única pessoa pode lançar algo que parece o trabalho de uma equipe inteira. Só é preciso lembrar que o tempo é mais caro que o dinheiro e, sob esse aspecto, escolher cada peça com cuidado.
Ao construir algo seu, faça a si mesmo uma pergunta para cada tecnologia: daqui a um ano, serei capaz de mantê-lo sozinho? Se não, então você provavelmente já tem a resposta.
Tudo funciona aqui: cutty.dev. E se quiser conversar sobre alguma dessas decisões, escreva para [email protected], respondo no mesmo dia.