Blog
Notas sobre desenvolvimento de software.
O 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