AI Engineer  ·  5 Years Full-Stack Engineering

I build AI systems that work in production.

Multimodal, multi-agent, MCP-native systems — traced, evaluated, and deployed, not demoed. Five years of full-stack engineering underneath, so the AI actually ships. Microsoft-certified in Azure and AI.

Production AI systems·Agents & RAG·Azure·AWS·Microsoft Certified

Selected work

Four production systems.
One flagship.

Each project is independently deployable and independently useful, and every one is built to the same standard — traced, evaluated, guarded, cost-controlled. The flagship, Evincta, goes furthest: a multimodal, multi-agent decision engine with a held-out eval gating CI. Two of the systems even connect — OpsCanvas calls Sourciq as a live tool.

01
FlagshipMCPMulti-AgentMultimodalHeld-out EvalHuman-in-the-loopProduction
Multimodal, MCP-native, multi-agent decision engine for insurance claims

Evincta

Flagship AI system. A claim — damage photos, a scanned policy, and adjuster notes — is extracted by vision, matched against visually- and textually-similar past claims in a multimodal vector database, and reasoned over by a panel of specialised agents coordinating across four real Model Context Protocol servers. Deterministic tools decide the facts; a single constrained LLM synthesises the decision. Every recommendation passes a structural human-in-the-loop gate and is written to a tamper-evident audit log. Deployed on Vercel + Render, hardened, and gated in CI by a held-out evaluation.

The problem

Auto-claims triage is 20–30 minutes of multimodal context-gathering per claim — read the damage photos, check coverage, estimate cost, screen for fraud, find precedent — before any decision. It's slow, inconsistent between adjusters, and exactly the judgment-under-evidence work where an AI system should gather and synthesise while a human keeps the decision.

The solution

A LangGraph state machine with four deterministic specialist agents (coverage, cost, fraud, precedent) that call MCP tools for facts, and exactly one LLM synthesiser that turns those facts into a decision constrained to a typed schema — so a model hallucination can never produce an out-of-policy outcome. Coverage is an absolute deny-gate; the graph cannot commit a decision without a human approve/override, enforced by a named interrupt node. On any dependency failure it degrades to human review rather than deciding on incomplete evidence.

The outcome

Scored end-to-end on 18 held-out claims (never indexed) with asymmetric scoring and a CI gate that fails the build on regression: weighted decision accuracy 0.722 with no dangerous errors, payout-in-range 0.769, extraction 0.889/0.833. Hardened — retry · circuit breaker · rate limit · daily spend cap · input/output validation · structured logging — each verified by tests in CI. Traced end-to-end in Langfuse. The held-out eval caught five real bugs, fixed as clean commits.

Stack

Python 3.12Claude Sonnet (vision)Voyage multimodal-3PineconeMCP / FastMCPLangGraphFastAPILangfuseReactTypeScriptDockerRenderVercelGitHub Actions
02
Agent 3 of 3
AWSMulti-AgentLangGraphHuman-in-the-loop
Multi-agent incident response with human-in-the-loop approval

OpsCanvas

Four AI agents in a LangGraph state machine. Triage classifies severity. Researcher queries Sourciq for runbooks and searches live status pages via Tavily. Synthesiser drafts the incident summary and proposed actions. Human approves or rejects. Action posts to Slack. Every action requires explicit human approval.

The problem

Incident response has a context-gathering problem, not a decision-making problem. An on-call engineer spends 20–30 minutes piecing together severity, runbooks, upstream status, and stakeholder communication — before making any decision.

The solution

LangGraph state machine with typed state at every node. P4 alerts auto-close. P1–P3 go through the full pipeline. Human review is a named interrupt node — the graph pauses and waits. Approval posts a cited Slack Block Kit message to #incidents.

The outcome

Context gathering reduced from 20–30 minutes to under 2 minutes. Sourciq used as a live knowledge tool inside the Researcher agent — the portfolio compounds.

Stack

Python 3.12LangGraphClaude SonnetTavilyUpstash RedisSlack Block KitFastAPIAWS LambdaReactTypeScript
03
Agent 2 of 3
AWSRAGRAGAS EvalHybrid Search
Production RAG for engineering documentation

Sourciq

Knowledge retrieval system for engineering teams. Ingests markdown documentation, generates embeddings with Voyage AI, stores in Pinecone, retrieves with hybrid search, and returns answers cited to specific document sections with confidence scores. RAGAS evaluation pipeline measures answer faithfulness, relevancy, and context precision against hand-curated Q&A pairs.

The problem

Engineering documentation is written and immediately forgotten. Teams re-solve the same problems, ignore runbooks that exist, and spend hours in Confluence finding context that should take seconds.

The solution

Hybrid search (dense + sparse) over indexed documentation. Cohere reranking surfaces the most relevant chunks. Every answer cites the exact document section it came from. Citation enforcement system prompt validated by RAGAS faithfulness score — the model cannot generate claims beyond retrieved context.

The outcome

Sub-2s retrieval. Hybrid alpha tuned to 0.7 dense / 0.3 sparse. RAGAS eval: Faithfulness 0.891 · Answer relevancy 0.847 · Context precision 0.823 · Context recall 0.812 — all four metrics exceed production thresholds.

Stack

Python 3.12FastAPIVoyage AIPineconeCohereClaude SonnetRAGASAWS LambdaReactTypeScript
04
Agent 1 of 3
AzureRAGSQL AgentFull Stack
Natural language analytics over structured business data

InsightIQ

AI agent that translates natural language questions into SQL queries, executes them against a PostgreSQL database, and returns cited, confidence-scored answers. Deployed on Azure with a FastAPI backend and React dashboard.

The problem

Business stakeholders need data answers but can't write SQL. Engineering teams spend hours writing ad-hoc queries that are forgotten the moment they run.

The solution

Claude interprets the question, generates safe parameterised SQL, executes it, and returns a structured answer with the query shown for transparency. Wrong answers are correctable — the query is inspectable.

The outcome

Natural language → SQL → structured answer in under 3 seconds. Query history persisted. Google Auth with 3 lifetime runs per account.

Stack

Python 3.12FastAPIClaude SonnetPostgreSQLReactTypeScriptAzure FunctionsVercel
The story

Five years of full-stack.
Microsoft-certified in Azure and AI. Now shipping production AI systems.

I spent five years building full-stack systems professionally — backends, frontends, infrastructure, databases. The kind of engineer who ships the whole thing and owns it in production. Along the way I earned Microsoft certifications in Azure development, Azure AI, and Power BI data analytics.

When LLMs became production-ready, I had an advantage most people entering AI didn't: I already knew how to deploy, monitor, and maintain systems under real constraints. The certifications gave me the architectural foundation; the full-stack background gave me the discipline to ship — not to demo.

So I built up deliberately. A SQL agent for structured-data retrieval. A RAG system for engineering knowledge, measured with RAGAS. A multi-agent incident-response pipeline with human-in-the-loop approval, where one agent calls another as a live API. Each project taught the skills the next one needed.

They culminate in Evincta — a multimodal, MCP-native, multi-agent decision engine for insurance claims. Vision extraction, precedent retrieval, four agents coordinating over real Model Context Protocol servers, a structural human-in-the-loop gate, a tamper-evident audit log, and a held-out evaluation that gates CI and caught five real bugs before it shipped. It's deployed, hardened, and honest about its limits. That's the difference I'm built around: I don't demo AI — I ship it, the same way I've always shipped software. Typed state, tested boundaries, production as the proof.

Capabilities

AI & Agents

  • LangGraph
  • Multi-agent orchestration
  • Model Context Protocol (MCP)
  • Anthropic Claude
  • Multimodal (vision) extraction
  • RAG systems
  • Vector embeddings
  • Hybrid search
  • Held-out evals & CI gates
  • RAGAS evaluation
  • Human-in-the-loop
  • Prompt engineering
  • Azure OpenAI

Backend

  • Python
  • FastAPI
  • Flask
  • Node.js
  • C# .NET
  • PostgreSQL
  • Redis
  • REST APIs
  • AWS Lambda
  • Azure Functions
  • Docker

Cloud

  • Microsoft Azure
  • Azure Functions
  • Azure Container Apps
  • Azure API Management
  • Azure Storage
  • Azure Service Bus
  • Azure Key Vault
  • Azure AD / Entra ID
  • Azure OpenAI Service
  • Azure Cognitive Services
  • Azure AI Search
  • Azure Bot Service
  • AWS Lambda
  • AWS SAM
  • API Gateway
  • CloudWatch
  • S3
  • IAM
  • Render

Data

  • Power BI
  • DAX
  • Power Query
  • M language
  • Data modelling
  • Star schema
  • Row-level security
  • Power BI Service
  • Power BI Gateway
  • ETL pipelines
  • SQL analytics
  • Data visualisation
  • Report design

Frontend

  • React 18
  • Next.js 14
  • TypeScript strict
  • Tailwind CSS
  • Vite
  • Vercel

Infrastructure

  • GitHub Actions CI/CD
  • Docker
  • Pinecone
  • Upstash
  • Langfuse
  • MLflow
  • Circuit breakers & retries
  • Rate limiting
  • Google OAuth
  • CloudWatch
Contact

Let's build
something real.

Production agentic AI — autonomous agents, RAG, multi-step workflows. Built to ship: traced, evaluated, guarded. If you're building in this space, let's talk.