Title: The Self-Healing Chatbot: From Widget to Production LLMOps
Open Graph Title: The Self-Healing Chatbot: From Widget to Production LLMOps
X Title: The Self-Healing Chatbot: From Widget to Production LLMOps
Description: Case study: production LLMOps with agentic observability, 6-layer defense, 71 evals, voice mode, and a closed-loop that generates tests from real failures.
Open Graph Description: Case study: production LLMOps with agentic observability, 6-layer defense, 71 evals, voice mode, and a closed-loop that generates tests from real failures.
X Description: Case study: production LLMOps with agentic observability, 6-layer defense, 71 evals, voice mode, and a closed-loop that generates tests from real failures.
Mail addresses
hi@santifer.io
Opengraph URL: https://santifer.io/self-healing-chatbot
Domain: santifer.io
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "TechArticle",
"@id": "https://santifer.io/self-healing-chatbot/#article",
"headline": "The Self-Healing Chatbot: From Widget to Production LLMOps",
"alternativeHeadline": "The Self-Healing Chatbot: From Widget to Production LLMOps",
"description": "Case study: production LLMOps with agentic observability, 6-layer defense, 71 evals, voice mode, and a closed-loop that generates tests from real failures.",
"author": {
"@id": "https://santifer.io/#person"
},
"publisher": {
"@id": "https://santifer.io/#person"
},
"datePublished": "2026-03-11",
"dateModified": "2026-07-21",
"keywords": [
"LLMOps",
"self-healing chatbot",
"agentic RAG",
"jailbreak defense",
"prompt injection",
"LLM evaluation",
"closed loop LLM",
"Langfuse",
"prompt versioning",
"adversarial testing",
"trace-to-eval",
"hybrid search pgvector",
"AI portfolio",
"chatbot evals",
"CI gate LLM",
"voice mode chatbot",
"OpenAI Realtime API",
"speech-to-speech AI",
"agentic observability",
"developer feedback loop",
"AI maintaining AI"
],
"url": "https://santifer.io/self-healing-chatbot",
"mainEntityOfPage": "https://santifer.io/self-healing-chatbot",
"image": [
"https://santifer.io/chatbot/hero-self-healing-chatbot.webp"
],
"inLanguage": "en",
"isPartOf": {
"@id": "https://santifer.io/#website"
},
"about": [
{
"@type": "SoftwareApplication",
"name": "Langfuse",
"url": "https://langfuse.com",
"applicationCategory": "LLM Observability"
},
{
"@type": "SoftwareApplication",
"name": "Supabase",
"url": "https://supabase.com",
"applicationCategory": "Database"
},
{
"@type": "Thing",
"name": "LLMOps"
},
{
"@type": "Thing",
"name": "Retrieval-Augmented Generation"
}
],
"proficiencyLevel": "Expert",
"dependencies": "Claude, Langfuse, Supabase, Vercel, OpenAI, Resend, GitHub Actions",
"citation": [
{
"@type": "SocialMediaPosting",
"name": "Han hackeado a mi chatbot — LinkedIn post (300+ reactions)",
"url": "https://www.linkedin.com/feed/update/urn:li:activity:7421984735024816128/"
},
{
"@type": "WebPage",
"name": "OWASP Top 10 for LLM Applications",
"url": "https://owasp.org/www-project-top-10-for-large-language-model-applications/"
},
{
"@type": "TechArticle",
"name": "Anthropic Tool Use Documentation",
"url": "https://docs.anthropic.com/en/docs/build-with-claude/tool-use"
},
{
"@type": "TechArticle",
"name": "Langfuse — Open Source LLM Engineering Platform",
"url": "https://langfuse.com/docs"
},
{
"@type": "TechArticle",
"name": "Supabase pgvector — Vector Embeddings Documentation",
"url": "https://supabase.com/docs/guides/ai/vector-embeddings"
},
{
"@type": "TechArticle",
"name": "Anthropic — Defending Against Prompt Injection",
"url": "https://www.anthropic.com/news/prompt-injections"
},
{
"@type": "WebPage",
"name": "Prompt Injection (Wikipedia)",
"url": "https://en.wikipedia.org/wiki/Prompt_injection"
}
],
"mentions": [
{
"@type": "SoftwareApplication",
"name": "Langfuse",
"url": "https://langfuse.com"
},
{
"@type": "SoftwareApplication",
"name": "Supabase",
"url": "https://supabase.com"
},
{
"@type": "SoftwareApplication",
"name": "OpenAI Realtime API",
"url": "https://platform.openai.com"
},
{
"@type": "SoftwareApplication",
"name": "Claude Code",
"url": "https://claude.ai"
},
{
"@type": "SoftwareApplication",
"name": "Vercel",
"url": "https://vercel.com"
}
],
"workTranslation": {
"@id": "https://santifer.io/chatbot-que-se-cura-solo/#article"
}
},
{
"@type": "Person",
"@id": "https://santifer.io/#person",
"name": "Santiago Fernández de Valderrama Aparicio",
"alternateName": [
"Santiago Fernández de Valderrama",
"santifer",
"Santi"
],
"url": "https://santifer.io",
"description": "Santiago Fernández de Valderrama is a software engineer specializing in multi-agent AI systems and agentic adoption. He created career-ops, an open-source project maintained by an orchestrated fleet of AI agents, and coined 'agentic maintenance': gated, evidence-based upkeep of a living codebase, sustained by a fleet of AI agents under human direction.",
"jobTitle": [
"AI Forward Deployed Engineer",
"Applied AI Engineer",
"Multi-Agent Systems Engineer",
"Agentic AI Engineer",
"Head of Applied AI",
"Solutions Architect (No/Low-Code & AI)",
"AI Product Manager"
],
"sameAs": [
"https://www.linkedin.com/in/santifer",
"https://github.com/santifer",
"https://x.com/santifer",
"https://dev.to/santifer",
"https://santifer.substack.com",
"https://contentdigest.santifer.io",
"https://www.youtube.com/@santifer_io",
"https://stackoverflow.com/users/32541743",
"https://orcid.org/0009-0006-2192-7210",
"https://www.crunchbase.com/person/santiago-fernandez-de-valderrama",
"https://huggingface.co/santifer",
"https://www.wikidata.org/wiki/Q138710224",
"https://santiferirepair.es",
"https://career-ops.org/about",
"https://www.facebook.com/santifer.io/",
"https://www.producthunt.com/@santifer",
"https://app.daily.dev/santifer"
]
},
{
"@type": "WebSite",
"@id": "https://santifer.io/#website",
"name": "santifer.io",
"url": "https://santifer.io"
},
{
"@type": "BreadcrumbList",
"@id": "https://santifer.io/self-healing-chatbot/#breadcrumbs",
"itemListElement": [
{
"@type": "ListItem",
"@id": "https://santifer.io/self-healing-chatbot/#breadcrumb-1",
"position": 1,
"name": "Home",
"item": "https://santifer.io"
},
{
"@type": "ListItem",
"@id": "https://santifer.io/self-healing-chatbot/#breadcrumb-2",
"position": 2,
"name": "The Self-Healing Chatbot",
"item": "https://santifer.io/self-healing-chatbot"
}
]
},
{
"@type": "FAQPage",
"@id": "https://santifer.io/self-healing-chatbot/#faq",
"inLanguage": "en",
"mainEntity": [
{
"@type": "Question",
"name": "Is this production-grade or just a demo?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Real production. Live on santifer.io since January 2026 with daily organic traffic, full observability via Langfuse, 71 automated evals run on every PR, 6-layer anti-jailbreak defense, agentic RAG on Supabase pgvector, and a CI gate that blocks deploys if any test fails. Not a playground: every conversation is traced, batch-scored with Sonnet overnight, and failures feed the next eval set."
}
},
{
"@type": "Question",
"name": "How much did it cost to build?",
"acceptedAnswer": {
"@type": "Answer",
"text": "$0 in infrastructure: free tiers from Vercel (edge functions), Supabase (pgvector RAG), and Langfuse Cloud (observability). The only variable cost is LLM APIs: under $0.005 per text conversation and ~$0.25 per voice session (OpenAI Realtime). Built solo using Claude Code, no team and no project budget."
}
},
{
"@type": "Question",
"name": "Why Claude and not GPT-4 or Gemini?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Claude has clean native tool_use, SSE streaming without wrappers, and Sonnet's quality/cost ratio is the best for conversation. Haiku for scoring is unbeatable on price. But the architecture is model-agnostic: switching models is a one-line change."
}
},
{
"@type": "Question",
"name": "Can I replicate this for my portfolio?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Yes. The code is public on GitHub (github.com/santifer/cv-santiago). The pattern (chat + Langfuse + evals + CI) is replicable in a weekend. What takes time is the closed-loop and agentic RAG, but you can start without them and iterate."
}
},
{
"@type": "Question",
"name": "What exactly is trace-to-eval?",
"acceptedAnswer": {
"@type": "Answer",
"text": "When a trace in Langfuse receives a quality score < 0.7, a new test case is automatically generated from the real input/output. That test is added to the suite and runs on every push. Today's production failure is tomorrow's CI test."
}
},
{
"@type": "Question",
"name": "What if a jailbreak gets past all 6 layers?",
"acceptedAnswer": {
"@type": "Answer",
"text": "Langfuse catches it in the batch eval (safety scoring). An email alert fires and a new adversarial test is generated. The next deploy already includes defense against that vector. That's the closed loop in action."
}
},
{
"@type": "Question",
"name": "How does voice mode work?",
"acceptedAnswer": {
"@type": "Answer",
"text": "OpenAI Realtime API handles the audio. Before responding, Claude searches the RAG and adapts content for speech: short sentences, no markdown, first person. Same brain, different mouth."
}
}
]
}
]
}
| title | The Self-Healing Chatbot: From Widget to Production LLMOps |
| author | Santiago Fernández de Valderrama Aparicio |
| msvalidate.01 | 22F0E5AD398442DDC95900300A3B4537 |
| og:type | article |
| og:image | https://santifer.io/chatbot/og-self-healing-chatbot.webp |
| og:image:width | 1200 |
| og:image:height | 630 |
| og:image:alt | The Self-Healing Chatbot: From Widget to Production LLMOps |
| og:site_name | santifer.io |
| og:locale | en_US |
| og:locale:alternate | es_ES |
| twitter:card | summary_large_image |
| twitter:url | https://santifer.io/self-healing-chatbot |
| twitter:image | https://santifer.io/chatbot/og-self-healing-chatbot.webp |
| twitter:image:alt | santifer - Applied AI Operator · Builder of career-ops |
| theme-color | #0a0a0a |
| color-scheme | dark |
| msapplication-TileColor | #0a0a0a |
| article:published_time | 2026-03-11 |
| article:modified_time | 2026-07-21 |
| article:author | https://www.linkedin.com/in/santifer |
| article:tag | LLMOps,self-healing chatbot,agentic RAG,jailbreak defense,Langfuse,evals,closed-loop,prompt injection |
Links:
Viewport: width=device-width, initial-scale=1.0
Robots: index, follow