Três projetos, uma stack.
O que a RogerLe.com, a RLMotorhome e o CamperBudget têm em comum por baixo do capot — e porque construímos assim.
Vistos de fora, os três projetos que mantemos parecem três negócios diferentes. A RogerLe.com é uma empresa de alojamento web online desde 1996. A RLMotorhome é o nosso hub de viagens — vídeos, fotografias, receitas, um mapa de todas as estradas que já percorremos. O CamperBudget é um SaaS que estamos a construir para outros viajantes de autocaravana que queiram uma forma honesta de ver quanto custa, de facto, viver na estrada. Alojamento, viagem, software. Três públicos. Três modelos de preços. Três problemas.
Olha por baixo do capot e são a mesma máquina.
Todos correm em AlmaLinux. Todos são servidos por nginx. Todos falam com uma base de dados MariaDB através do PHP-FPM. Todos são publicados como arquivos tar.gz, extraídos à mão no servidor, colocados em nginx:nginx e recarregados. Podíamos ter feito três escolhas diferentes. Não fizemos. Há uma razão — e a razão é o artigo.
Uma superfície pequena, de propósito
Quando geres mais do que um projeto, a tentação é escolher a ferramenta certa para cada um. Um gerador de sites estáticos para as páginas de marketing. Uma framework para o SaaS. Um CMS para o blog. Cada ferramenta é razoável isoladamente. Juntas, tornam-se uma fatura de manutenção que cresce mais depressa do que os próprios projetos.
Escolhemos o oposto. Uma stack para os três. PHP vanilla. JavaScript vanilla sempre que possível. Sem build pipeline. Sem gestor de pacotes a puxar atualizações que não pedimos. A contrapartida é que algumas coisas são ligeiramente mais lentas de escrever da primeira vez. A recompensa é que nada se parte sozinho.
Da primeira vez que fazes deploy de uma aplicação PHP vanilla, perguntas-te porque é que alguma vez fizeste outra coisa. Cinquenta deploys depois, deixas de te perguntar.
O que partilham
O substrato é igual visto de qualquer ângulo:
- AlmaLinux 8. Estável, compatível com RHEL, atualizações previsíveis.
- Nginx como servidor web. Proxy reverso quando precisamos, ficheiros estáticos quando não.
- PHP 8.3 com PHP-FPM, a correr como
nginx:nginx. Sem exceções. - MariaDB. Cada projeto tem a sua própria base de dados. O esquema vive em controlo de versões, ao lado do código.
- PHP vanilla, JS vanilla, variáveis CSS. Sem frameworks a não ser que uma claramente mereça o seu lugar.
- Deploy em tar.gz. O Roger empacota no portátil, o
scpentrega, quatro comandos instalam. Não há pipeline de CI/CD porque o deploy é suficientemente pequeno para não precisar de uma. - bcrypt, tokens CSRF, comparação timing-safe, sessões com timeout de 24 horas. As mesmas primitivas de segurança, usadas da mesma maneira, em todos os painéis de administração.
Os caminhos de administração têm até o mesmo nome. /rladmin/ nos três sites — não /admin/, porque é à primeira porta que os bots batem.
O que é diferente
A stack partilhada é o substrato. Os projetos em cima dela são distintos.
A RogerLe.com é um negócio de alojamento, por isso tem um sistema de faturação, um helpdesk e um site público que tranquiliza quem está prestes a colocar um ano de email nos nossos servidores. A RLMotorhome é um hub de viagens, por isso tem um mapa de viagens, uma galeria de fotografias, uma secção de receitas que a Le mantém, e vídeos do nosso canal de YouTube. O CamperBudget está ainda em construção ativa, mas o seu centro de gravidade é uma folha de cálculo substituída por algo melhor — entradas que fazes numa bomba de combustível em três toques, e que funcionam offline.
Não fingimos que os projetos são uniformes. Não são. Cada um tem o seu público, o seu ritmo, a sua linguagem visual. O que partilham é a parte que o utilizador não vê.
Porque é que isto funciona
A resposta honesta é que somos duas pessoas. O Roger escreve o código. A Le testa-o no seu MacBook Pro e diz-nos quando alguma coisa é demasiado pequena para se ler. Não há equipa para integrar. Não há codebase para manter três engenheiros em sincronia. Há um operador, uma testadora e bastante ajuda da Awesome Crew — o nosso nome para as instâncias do Claude com quem trabalhamos — mas a responsabilidade final pousa sempre na mesma mesa de cozinha.
Uma stack significa um conjunto de hábitos. Conseguimos passar de um bug na RogerLe.com para uma funcionalidade na RLMotorhome e para uma questão do CamperBudget sem mudar a forma como as nossas mãos se mexem. O custo do context switching, que é o verdadeiro imposto numa equipa pequena, é quase zero.
Também significa que os projetos se podem ajudar uns aos outros. Um padrão que descobrimos para o admin do alojamento acabou no log de viagens. Um sistema de tokens CSS que emergiu na RLMotorhome é agora a base do design do CamperBudget. Nada se desperdiça porque nada é estranho.
O motivo de fundo
Há uns dias, o Roger escreveu um artigo no seu site pessoal chamado Produção a Partir de um Lugar de Estacionamento. A tese era que o escritório se move e a infraestrutura não — e que a disciplina de trabalhar a partir de uma autocaravana torna a infraestrutura melhor, não pior.
Este artigo é a mesma tese vista de outro ângulo.
Três projetos, uma stack, porque quem os faz são duas pessoas, e essas pessoas às vezes estão estacionadas debaixo de árvores com sinal fraco, e a única maneira de isto tudo funcionar durante trinta anos é escolher coisas simples de propósito.
A stack é a parte fácil. A disciplina é o trabalho.
Tecnologia · Domingo, 17 de maio de 2026 · Agen, França