cv-santiago

santifer/cv-santiago

Interactive CV with AI chat integration

729
Stars
259
Forks
4
Open issues
4
Watchers
HTMLLast pushed Jul 2, 2026

Overview

A portfolio website showcasing interactive features powered by an integrated AI chatbot. The site includes agentic retrieval-augmented generation, extensive evaluative tests, and observability tracking.

Categories

Tags

Similar tools

Install

git clone https://github.com/santifer/cv-santiago

README

santifer.io

:gb: English | :es: Español

Interactive portfolio with AI chatbot (text + voice), agentic RAG, 71 automated evals, LLMOps dashboard, and 6-layer prompt injection defense



The Problem

Static CVs don't show what you can actually build. A PDF lists skills — it doesn't prove them.

The Solution

A production-grade interactive portfolio that demonstrates the skills it describes: dual-mode AI chatbot (text + voice) with agentic RAG, full LLMOps observability with custom dashboard, 71 automated evals as CI gate, prompt versioning, and a closed-loop that generates tests from production failures.

Key Features:

  • AI Chatbot "Santi" — Text (Claude Sonnet) + Voice (OpenAI Realtime API). Responds in first person as Santiago. Agentic RAG with hybrid search (pgvector + BM25) and Haiku reranking
  • 6-Layer Defense — Keyword detection, canary tokens, fingerprinting, anti-extraction, online safety scoring, adversarial red team. Real-time jailbreak email alerts
  • 71 Automated Evals — 10 categories: factual accuracy, persona, boundaries, quality, safety, language, RAG quality, multi-turn, source badges, voice quality. CI gate on every push
  • LLMOps Dashboard — Private /ops with 8 tabs: Overview, Conversations, Costs, RAG, Security, Evals, Voice, System. Real data from Langfuse + Supabase
  • Closed Loop — Trace → online scoring → quality < 0.7 → auto-generate test → CI gate blocks deploy
  • Voice Mode — OpenAI Realtime API, audio-to-audio, shared RAG pipeline, ~$0.25/session
  • 6 Published Case Studies — Bilingual (ES/EN) with JSON-LD, prerendered HTML, cross-linked RAG, and interactive architecture diagrams
  • Interactive Architecture Diagram — GSAP-animated SVG with narrated audio, pan/zoom, dark mode sync. Explore it →
  • GEO-readyllms.txt, structured data (JSON-LD), AI crawler-friendly robots.txt

Tech Stack


Chatbot Architecture

Explore the interactive diagram → 10 phases · narrated audio · zoom + pan

User message → FloatingChat.tsx → api/chat.js (Vercel Edge)
                                    ├── System prompt (Langfuse registry + fallback)
                                    ├── Claude Sonnet (tool_use decision)
                                    ├── Agentic RAG (if needed):
                                    │     ├── OpenAI embeddings (text-embedding-3-small)
                                    │     ├── Supabase pgvector (semantic) + full-text (BM25)
                                    │     └── Claude Haiku (reranking + diversification)
                                    ├── Claude Sonnet (streaming generation)
                                    ├── Langfuse tracing (every span with cost)
                                    └── waitUntil → Haiku scoring (0ms added latency)

Voice mode → useVoiceMode.ts → api/voice-token.js → OpenAI Realtime WebSocket
                                  └── api/rag-search.js (function calling for RAG)

Key Files

FilePathDescription
Chat edge functionapi/chat.jsMain chatbot — RAG, tracing, scoring, streaming, defense
RAG pipelineapi/_shared/rag.jsHybrid search, reranking, cost tracking, intent classification
Prompt managementapi/_shared/prompt.jsLangfuse prompt registry with file fallback
Voice tokenapi/voice-token.jsOpenAI Realtime ephemeral token + rate limiting
Voice RAGapi/rag-search.jsRAG search for voice mode function calling
Voice traceapi/voice-trace.jsVoice session tracing with cost estimation
Chat widgetsrc/FloatingChat.tsxReact widget — streaming SSE, quick prompts, contact CTA
Voi