Case Study 01
My Notes Chatbot
Digitize handwritten journals, search them by content and date, and chat with them using an LLM with RAG.
ChatBOT with RAG // 2026
The What
I built an end-to-end pipeline that digitizes personal handwritten journals and makes them queryable via a custom RAG (Retrieval-Augmented Generation) Chatbot.
Phase 1 OCR Optimization - I iterated through different OCR engines, reducing the Character Error Rate (CER) from 22.7% to < 4%. The extracted text and metadata is store in SQLite, while using ChromaDB as a vector store to enable semantic search (search by meaning not just words).
Phase 2 Chatbot with RAG implementation - testing two distinct chatbot architectures: Local: Llama 3.1 8B running on macOS (M4) via Ollama and a custom Flask UI. Cloud-Hybrid: Gemini 3.1 Pro-Preview integrated through AnythingLLM.
The Gemini-powered setup provided the best reasoning and retrieval accuracy. By using the Gemini API with AnythingLLM, I maintained data privacy: all notes are indexed locally on my Mac, and only specific, encrypted text snippets are sent to Google’s API. In the paid tier, these prompts are excluded from model training.
Tools: Claude Code, Cursor
The Why
"If you would not be forgotten, as soon as you are dead and rotten, either write things worth reading, or do things worth writing"
I have several handwritten journals that store thoughts and memories of great moments through the years. Now I can chat about them with a Chatbot on my laptop, while still keeping them private. My notes are in both Portuguese and English and sometimes my handwriting is so bad I have a hard time understanding what I wrote, a problem that OCR solved!
TECH STACK
OCR
Gemini 3.1 Pro Preview via Gemini AI API
Database
SQLite (structured) + ChromaDB (semantic)
LLMs
Llama 3.1 8B via Ollama and Gemini 3.1 Pro Preview
Chat UIs
AnythingLLM and Flask server

Image 01. Handwritten page from my notes
Fig 02. Asking Chatbot about highlights of my Japan trip
Key
Learnings
LLM with RAG
Giving an LLM context specific to the task, in this case my handwritten notes
Running an LLM Locally
Using Llama 3.1 8B via Ollama, ensuring privacy when required
Using Skills with an Agent
Storing specific Skills files - in this case for access to updated API documentation
Using "local by default" tools for Chatbot with RAG
Experimented with AnythingLLM and Open WebUI
View the source on GitHub
Explore Repository