Um chat com IA que não quebra quando a chave de API expira
·2 min de leitura
#chat#claude#ollama#typescript#nextjs
A maioria dos sites de portfólio com chat de IA quebra no momento em que a chave da API expira. O meu não.
Construí furevikstrand.cloud com três níveis de degradação suave:
- Claude (Haiku) — primário, em streaming.
- Ollama local — secundário, também em streaming, quando self-hosted.
- Keyword matcher em TypeScript puro — sempre disponível. Levenshtein + chaves ponderadas sobre uma base de conhecimento feita à mão. Sem rede, sem chaves de API.

Cada nível define um header X-Reply-Source na resposta, para o cliente saber se deve ler um stream ou uma string única.
Por que isso importa
O modo de falha comum para um chat de IA é "o site parece quebrado". Cair para um matcher determinístico significa que a conversa continua funcionando — mesmo que meu saldo da Anthropic zere ou meu servidor de LLM caia.
Bônus: o mesmo matcher alimenta os slash commands (/about, /stack, /projects), então o caminho offline é o mesmo código que o online — não uma cópia degradada.
Feito com Next.js 16 + React 19 + TypeScript, em deploy via Docker.