Blog
Notas sobre desenvolvimento de software.
Três slash commands que pagam o aluguel
A maioria dos recursos do Claude Code não é usada — as pessoas não saem do chat. /review, /security-review e /init se pagam no primeiro dia, mas cada um tem um uso errado que vira teatro. A ferramenta é grátis; o hábito é o custo.
#claude-code#ai#developer-tools#practiceNão aceite slop no primeiro passe
O resumo da IA sobre o que ela fez não é o mesmo que ela fez. O resumo parece o artefato. O diff é o artefato — e a única review que sobrevive seis meses é a feita contra o diff, não contra o resumo.
#claude-code#ai#developer-tools#practiceVerifique antes de recomendar: quando a IA cita, você dá grep
A saída mais perigosa da IA não é errada — é velha. O Claude cita com confiança uma flag removida no último trimestre, uma função renomeada, um caminho que não existe mais. Trate todo símbolo nomeado como hipótese. Dê grep antes de agir.
#claude-code#ai#developer-tools#practicePlaneje antes de codar: a armadilha do "só escreve"
O Claude escreve código de qualquer prompt vago — quase sempre no formato errado, que você só nota 300 linhas depois. A correção é uma frase: planeje primeiro. O valor é o desacordo que o plano revela enquanto ainda é grátis consertar.
#claude-code#ai#prompting#developer-tools#practiceO prompt de espaço negativo
Você pede ao Claude uma correção de uma linha e recebe um refactor, três testes novos, um arquivo renomeado e um comentário. A correção é escopo negativo — nomeie a faixa que o assistente não deve cruzar, e o resto do prompt fica curto.
#claude-code#ai#prompting#developer-toolsO CLAUDE.md que de fato muda o comportamento
A maioria dos CLAUDE.md descreve o projeto. Stack, pastas, build — coisas que o Claude deriva em dois ls. Os que realmente mudam comportamento têm três tipos de regra: negativas, enraizadas em incidente, gosto com um porquê.
#claude-code#ai#prompting#developer-toolsO bug que vivia no gap entre dois serviços
Dois serviços calculavam 'sold' de duas formas diferentes. O admin recebia um 409 Conflict que não fazia sentido de nenhum dos lados. O bug não estava em nenhum dos serviços — estava no gap entre eles, e um contract test impede o próximo.
#microservices#debugging#distributed-systems#war-storyPor que passamos EntityManager como parâmetro
Um bug de stock drift que ninguém conseguia reproduzir localmente. A correção foi uma mudança de assinatura — pare de injetar EntityManager em singletons NestJS, passe por requisição.
#nestjs#typescript#concurrency#dependency-injection#war-storyRecrutadores leem suas escolhas técnicas, não sua página «Sobre»
Cada decisão técnica em furevikstrand.cloud também foi um sinal para recrutadores — degradação em três níveis, um dashboard self-hosted, um caminho de código compartilhado. Nada disso aparece num CV; tudo aparece no repo e no site.
#hiring#careeradvice#portfolio#softwareengineeringConstruí meu próprio dashboard para ver o que os visitantes perguntam ao chat
/admin é uma página Next.js server-rendered, com basic-auth, que lê eventos de chat do MySQL — 13 painéis cobrindo tráfego e chat, incluindo uma fila de misses que transforma falhas detectadas em respostas em uns 30 segundos.
#admin#analytics#selfhosted#privacy#mysql#nextjsUm chat com IA que não quebra quando a chave de API expira
Três níveis de degradação suave — Claude, Ollama e um keyword matcher em TypeScript puro — mantêm o chat funcionando mesmo se a chave da API acabar ou o servidor de LLM cair.
#chat#claude#ollama#typescript#nextjs