// the find
santifer/cv-santiago
Interactive CV with AI chat integration. Built with React 19, TypeScript, Claude API. Chat with my AI avatar about my experience.
A single-person interactive CV/portfolio site (React 19 + Vite) with a Claude-powered chat avatar backed by RAG over the author's own case studies, plus voice mode via OpenAI's Realtime API. It's really a showcase of LLMOps practices (tracing, evals, cost tracking) wrapped around a personal website, aimed at developers who want a reference for building an observable, tested chatbot rather than at anyone looking for a CV template.
The RAG pipeline is a sensible cheap/expensive split: Sonnet decides whether to search, pgvector+BM25 hybrid retrieval runs, and Haiku does reranking and diversification instead of burning the bigger model on that step. The closed-loop idea (Langfuse quality score below 0.7 on a production trace auto-generates a regression test that gates CI) is a real, non-trivial piece of engineering, not just a buzzword. Evals and adversarial red-teaming actually run in GitHub Actions on every push rather than being a claim in the README with no CI wiring.
It's hardcoded to one person's identity, voice, and content — reusing this for anyone else means rewriting the persona, RAG corpus, and case studies, not just swapping config. The repo ships a lot of non-code weight: multiple `.seo-audit*` folders of markdown reports and a `.playwright-mcp` directory full of screenshots and page dumps are committed straight into history. The '6-layer defense' and '71 evals' framing reads like landing-page copy for what's mostly standard prompt-injection mitigations (keyword/canary/fingerprint checks) — the evals test chatbot behavior and dashboard contracts, not the correctness of the application code itself. The `/ops` dashboard auth is a single shared password (`OPS_DASHBOARD_SECRET`), which is fine for a solo project but worth flagging before anyone copies the pattern somewhere with multiple users.