Sobre
O que resolve
- Expõe POST /chat para o site fazer perguntas.
- Injeta o CV no system prompt — a IA só fala com base nele.
- Roda de graça na Cloudflare Workers, com deploy via Wrangler.
- Tom conversacional curto, em português, com gancho para o próximo tema.
O que não é
- Não é chatbot genérico (sem RAG, sem memória longa, sem tools).
- Não inventa experiência fora do arquivo de CV.
- Não substitui documentação oficial da Cloudflare ou da Groq.
- Não inclui autenticação de usuário — só CORS por origem permitida.
Como funciona
Fluxo ponta a ponta do request até a resposta. Tudo cabe em um Worker Hono e uma chamada HTTP à API da Groq.
Frontend
Componente do portfólio (ex.: AskAbout) envia a pergunta do visitante.
POST /chat
JSON { "messages": [...] } (histórico), validação de tamanho e origem CORS.
Worker Hono
Monta o system prompt com o CV embutido e chama a Groq.
Groq
Modelo llama-3.3-70b-versatile, temperatura baixa para respostas mais fiéis ao CV.
Resposta
Retorna { "answer": "..." } para o front renderizar (ex.: markdown).
API
Endpoint principal: POST /chat. Há também GET / com um JSON de health/info do serviço.
Request
{
"messages": [
{ "role": "user", "content": "Qual é a stack principal?" },
{ "role": "assistant", "content": "..." },
{ "role": "user", "content": "sim" }
]
}
Response (sucesso)
{
"answer": "..."
}
Exemplo local com curl
curl -X POST http://127.0.0.1:8787/chat \
-H "Content-Type: application/json" \
-H "Origin: http://localhost:5173" \
-d "{\"messages\":[{\"role\":\"user\",\"content\":\"Qual sua formação?\"}]}"
Em produção, troque a URL pela do Worker (*.workers.dev e garanta que a Origin do seu site está em ALLOWED_ORIGINS.
Stack
Poucas peças de propósito: runtime leve, framework HTTP mínimo e um provedor de LLM com boa latência no free tier.
Setup & deploy
- Local: bun install, copie .dev.vars.example → .dev.vars, cole a GROQ_API_KEY e rode bun run dev.
- Login: bunx wrangler login.
- Secret (produção): bunx wrangler secret put GROQ_API_KEY — nunca commitada no código.
- Deploy manual: bunx wrangler deploy.
- CI/CD: push em main roda lint + testes e faz deploy via GitHub Actions (secret CLOUDFLARE_API_TOKEN).
- Qualidade local: bun run lint, bun run typecheck, bun run test.
- Front: aponte a URL do chat no componente do portfólio para …/chat.
- CV: edite src/cv.md e faça deploy de novo.
Passo a passo completo no README.md.
Segurança (o básico deste estudo)
- GROQ_API_KEY só em .dev.vars (gitignore) ou secret do Wrangler.
- CORS restrito por ALLOWED_ORIGINS no wrangler.jsonc.
- O CV em Markdown não é tratado como segredo — já é conteúdo público do portfólio.
- Sem rate limit avançado / auth de usuário neste exercício: se for evoluir, comece por aí.