

Local-LLM Email Triage Agent
Agent that sorts incoming email into 8 semantic categories with an LLM running locally (Ollama + llama3.1), orchestrated by self-hosted n8n on Docker Compose. Prompt, categories and thresholds live in versioned YAML, and no content is sent to third-party APIs.
Key Features
0.6 confidence threshold with a manual review route: below it, the email goes to a review queue instead of getting a guessed label.
Prompt, category descriptions and thresholds kept in versioned configuration, outside the execution flow: changing behavior doesn't require editing the workflow.
Python watchdog triggered by a systemd timer, outside the container, that queries the execution database and alerts when there's no activity within the expected window.
Technical Challenges
Diagnosing a silent failure: the model returned labels outside the expected set without raising any error. I traced the cause to the context window and measured accuracy on a batch of real emails before and after the fix.
Making sure an outage can't go unnoticed: a credential expired silently and triage stopped for 38 days without anyone noticing — which led to the out-of-container watchdog.
Other Projects
Explore other projects and solutions I have built.
Portfolio
Featured Projects
Modern, responsive personal portfolio with bilingual support (EN/PT), dark theme, smooth animations, and a secure contact form powered by EmailJS and reCAPTCHA v3.
Async REST API built with FastAPI that exposes four datasets from Brazil's Federal Transparency Portal (CGU) — corporate card spending, official travel, contracts and public bids — through versioned /v1/ endpoints. Every page fetched is normalized and stored in PostgreSQL, and stored records can be filtered by agency, period and value range.
Agent that sorts incoming email into 8 semantic categories with an LLM running locally (Ollama + llama3.1), orchestrated by self-hosted n8n on Docker Compose. Prompt, categories and thresholds live in versioned YAML, and no content is sent to third-party APIs.
Classification pipeline for dermoscopic images from the public HAM10000 dataset: OpenCV preprocessing, lesion-level splits with no data leakage, 8 CNN architectures compared with transfer learning, and evaluation by F1, recall, AUC and confusion matrix. Best result on the lesion-level test set: ResNet50, with 73% recall and 0.85 AUC for melanoma. A triage project: it does not diagnose.