Most "AI chatbot" projects fail for one reason: the bot answers from the internet, not from your business.
This week I'm sharing how I build RAG systems that answer only from your own documents and show the source for every answer. One example is a legal archive with 500+ page documents, built with LangChain, Milvus and Voyage AI, using context-aware chunking and hybrid search.
If you have documents, a catalog or support tickets that your team keeps searching by hand, I can turn them into a working assistant. Message me here on Contra.
An AI guide grounded in 56 texts of conscience. It quotes only what it finds, shows only the sources it used, and finds the right one 94% of the time.
The brief
VoxAnima is a conversational guide for people facing a moral choice at work: the moment you see something wrong and have to decide whether to keep going. It speaks in the voice of its founder, an activist and author with 35 years in the work. It draws on a fixed library of nonviolence and wisdom literature: Gandhi, the Gospels, the Hebrew Bible, the Qur'an, the Dhammapada, Tolstoy, the Quakers, the Stoics and more.
One rule mattered more than anything else. Every claim had to come from a passage the system actually found, and the source line under each answer had to be true.
What I built
A searchable library of 56 texts, split into 1,600+ passages, stored in Postgres with pgvector and searched by meaning on every question.
Chunking that respects the texts. Scripture is split by whole verses, so no passage cuts a verse in half or crosses a chapter. Each passage carries its own reference, like Isaiah 58:1-14, so the answer can say exactly where a line came from.
A search cutoff measured, not guessed. The original spec's threshold was tuned for a different embedding model and returned nothing. I measured the real score range and set the cutoff from the data.
A balance rule. Scripture is about 60% of the library, so it used to crowd out every other voice. Each answer now takes at most 2 passages from any one source, which leaves room for Woolman, Tolstoy or the Buddha to speak.
Sources you can trust. The model numbers each passage it uses. The app shows a source line only for passages the answer actually drew on. A passage that was found but not used gets no byline.
A test set for search. 34 real questions with known answers, run before and after every change. The right source lands in the top 5 for 94% of them.
Fail loudly, never silently. When the database went down in production, the app had kept answering with no sources and nobody could tell. I made failures visible, added a daily health check, and the test suite now refuses to pass against a dead backend.
Results
94% of test questions find the right source in the top 5 (MRR 0.78)
Only cited passages get a byline: in the cover's live example, 5 passages were found, 3 were used, and 2 got no byline
The founder's voice comes from his own recorded answers, held as a reference set the model writes against
Stack
Next.js · Supabase (Postgres + pgvector) · Voyage embeddings · Claude via the Vercel AI SDK · Vercel
Splitting by whole verses is the right call. In a document assistant I built, quotes cut mid-word failed their own verification, so chunk and quote boundaries matter more than people expect. One check that helped: before showing an answer, confirm each quote really appears in...
If you're building an AI assistant, Hamel Husain's evaluation FAQ gives you questions for examining failures. Jason Liu's RAG guide covers improving retrieval for document-based assistants.
I've included both in a guide to ten AI builders, with an original source for each and a note on when their work is useful. The selection covers model mechanics, evaluation, retrieval and agent design.
I Built Quvelis Chatbot 2.0 — An AI Assistant That Runs on Your Own Server. 🚀🤖
What if your AI assistant didn't depend on expensive cloud APIs, external AI subscriptions, or sending every conversation to a third-party service?
That's the idea behind QUVELIS — a self-hosted AI assistant designed for developers, students, and businesses.
Today, I'm sharing a look at Quvelis Chatbot 2.0, a project I'm building to make AI assistance more accessible, private, and customizable.
❌ The Problem with Many AI Applications
Businesses and developers often face:
Recurring API costs and unpredictable usage expenses.
Dependence on external AI providers.
Limited control over where their conversations are processed.
Disconnected tools for coding, document analysis, and knowledge management.
Difficulty customizing AI assistants for specific workflows.
Limited control over AI infrastructure and data.
My goal was to approach these problems differently.
⚡ Introducing Quvelis Chatbot 2.0
A modern, self-hosted AI assistant built with Next.js, featuring a ChatGPT-inspired interface and local-first architecture.
Here's what I've been building:
🧠 1. Local-First AI Assistance
Designed to operate on your own infrastructure without requiring external AI API keys.
💻 2. AI Coding Assistant
Ask programming questions, generate code snippets, understand technical concepts, and get help with development tasks.
📚 3. Knowledge Uploads
A dedicated knowledge interface for working with information and documents.
💬 4. Conversation History
Create new chats, revisit previous conversations, and organize your interactions.
🎙️ 5. Voice-Enabled Chat
Microphone input support for a more flexible way to interact with the assistant.
📎 6. File Attachments
An attachment interface for including files in your chat workflow.
🗂️ 7. Workspaces
Dedicated workspace functionality to support organized AI-assisted work.
🌙 8. Modern AI Chat Interface
A clean, responsive interface with dark-mode controls, activity access, and an integrated developer-friendly experience.
🔌 9. Local API Architecture
Built around a self-hosted approach, giving developers more control over how the application is deployed and extended.
🛠️ Built with Modern Web Technologies
The development stack includes:
Next.js and React
TypeScript
Tailwind CSS
Local API routes
Self-hosted application architecture
Git and GitHub for version control
💡 Why Am I Building Quvelis?
Because I believe AI tools should be more customizable and accessible.
Not every developer wants to depend on multiple external services.
Not every business wants to send sensitive information to third-party AI platforms.
And not every useful AI application needs to start with an expensive subscription.
Quvelis is my attempt to explore a different approach.
🚀 What's Next?
I'm continuing to develop Quvelis with a focus on stronger knowledge workflows, improved AI capabilities, reliable file handling, better voice interactions, and a smoother developer experience.
The long-term vision is to create a flexible AI platform that can support developers, businesses, and custom automation use cases.
This isn't just another chatbot interface. It's a foundation for a more customizable AI workspace.
💬 Two Questions for Developers & Business Owners
🔹 If you could run your own AI assistant, what feature would you want first?
🔹 Would you prefer a self-hosted AI assistant or a cloud-based solution for your business?
I'd love to hear your thoughts as I continue building Quvelis.
Building products. Solving problems. Exploring what AI can do.
Self-hosting gives you control over where data lives, but uploads, temp files, logs and backups still define the privacy boundary. Are knowledge files kept on the same server as the model?