Full-stack AI engineer specializing in agentic systems and the interfaces that keep them explainable. Six years across application development, full-stack engineer, Agentic AI, RAG, and more!

I started in frontend and moved toward AI without leaving the interface behind. Each marker is coloured by the discipline the role actually leaned on.
Architected an enterprise bid intelligence platform on LangGraph (structured tool calling, retrieval, business-rule validation, stateful orchestration), then built the React interface where users review and intervene at the decisions that matter. Bid opportunity intake improved 10–12%.
Evaluated model behaviour across long multi-turn conversations and built the datasets and frameworks to measure grounding, hallucination, and task completion. Also built an agentic incident-response platform for security operations end to end (FastAPI services and React interface), processing incidents roughly 20% faster.
Built client-facing analytics interfaces in React and the Python microservices behind them: interactive data views over AI-generated output, wired to FastAPI through asynchronous retrieval. Also built NLP preprocessing pipelines covering tokenization, normalization, and feature extraction, with structured logging and fault-tolerant processing throughout.
Turned Figma wireframes into production B2B interfaces across multiple modules in React and TypeScript, built on reusable component patterns and integrated with REST APIs through async workflows. Improved application responsiveness by roughly 10% through lazy loading, code splitting, and caching, with Cypress coverage over the critical paths.
A confident paragraph with nothing behind it is worse than no answer at all. Citations belong in the default view, not behind a disclosure arrow.
Automation should run freely right up to the point where a mistake costs something. That is where the interface stops and asks.
Ambiguous intent, lost context, a tool that times out. These are the common cases, not the edge cases, and they deserve real screens.
What the agent knows, what it assumed, and what it is waiting on should all be visible. If a user can see the state, they can correct it.
Multi-turn dialogue orchestration, conversation state, agent workflow design, tool and function calling, human-in-the-loop patterns, prompt chaining, context management.
GPT, Gemini, Grok, Claude. Prompt engineering, LLM evaluation, contextual reasoning, response grounding, hallucination detection and mitigation, retrieval-augmented generation.
LangChain, LangGraph, CrewAI, Hugging Face, PyTorch, TensorFlow, scikit-learn, NumPy, pandas.
React, TypeScript, component architecture, state management, responsive interfaces, REST integration.
User journey mapping, explainable AI interactions, Figma, design systems.
Python, FastAPI, Flask, Node.js, Express, REST and JSON APIs, microservices, async and event-driven processing, ChromaDB, Pinecone, FAISS, MongoDB, semantic search, chunking, reranking.
AWS, Docker, Git, Postman, Claude Code, Cursor, Codex.
I spent my first years building interfaces and my last few building the systems behind them. That combination is the whole point: I can argue about retrieval strategy in the morning and about where a confirmation dialog belongs in the afternoon, and I think those are the same argument.
Most of my work now lives in regulated, high-stakes workflows (bids, contracts, legal documents) where an AI system has to be transparent enough that a person will actually sign off on what it produced. Making that legible is a design problem at least as much as an engineering one.
Outside of work I love to sing, write songs, dance, and play badminton!