Work
Entrain
AI-guided brainwave entrainment, live and commercially available at entrain.still.codes. A closed-loop feedback controller reads real-time band-power data from a Neurosity Crown EEG headset directly in the browser, smooths and baselines it on-device, and adjusts photic and audio stimulus frequency mid-session, falling back to open-loop delivery rather than stalling if the EEG stream drops. An AI agent recommends session design beforehand and writes a data-grounded retrospect after, bounded by hard safety guardrails. Tiered Stripe subscriptions, a rate-limited Supabase AI proxy, and native iOS and Android builds via Capacitor. The only project in this portfolio shipped commercially to the public.
React, TypeScript, Supabase, Stripe, Neurosity SDK, CapacitorPlumbline
An evaluation and verification gate for AI-generated SQL and dbt. Built on Python, dbt Core, and DuckDB, it evaluates the answer, not the code: a correct query in any shape passes, a plausible but wrong one is blocked before it reaches a stakeholder. The public starter kit ships two worked examples and runs offline in minutes.
Python, dbt Core, DuckDBAdClaim
A retrieval-augmented marketing-compliance assistant built with CrewAI: a four-agent pipeline (planner, retriever, answerer, and an ablatable faithfulness verifier) answers advertising-compliance questions from official FTC guidance only, citing sources or refusing when a question falls outside the corpus. The eval is the point: Ragas and custom refusal metrics compare the verifier against a baseline, with an honest, documented result. The verifier improved retrieval-facing metrics but not faithfulness or answer relevancy, and the current refusal test set isn't hard enough yet to prove it adds refusal value either.
Python, CrewAI, Chroma, RagasAtlas
A five-agent algorithmic trading research platform: a regime detector, a strategy engine, and a Claude-backed Research Agent all route through a Risk Agent that can veto a trade, with structural independence from the agent that proposed it. Three months of backtesting have not beaten a blind baseline, and live trading stays gated until one does. Full architecture and the decision log (70-plus logged decisions) are on the detail page.
Python, asyncio, SQLiteObservable
A local-first, privacy-preserving EEG session archive for the Neurosity Crown, built as a single Rust daemon. An append-only write-ahead log is the source of truth; a materializer replays it into Parquet idempotently, and a reconciler heals interrupted sessions on startup by walking session state through active, interrupted, and recovered. An embedded DuckDB engine serves queries over the result behind a small HTTP API. The project is archived: the product direction moved to a closed-loop app that no longer needed a separate capture layer, and that pivot is documented in the repo rather than hidden.
Rust, Tokio, DuckDB, Parquet, Axum, SvelteKitAI-search-system
A production-style search system for technical documentation, built to separate retrieval quality from answer generation. Three retrieval modes (keyword, semantic, and hybrid via Reciprocal Rank Fusion) feed a two-stage reranker, and every result carries explainable ranking signals instead of a generated answer. An offline evaluation framework scores retrieval with Recall@k and nDCG@k against hand-labeled queries; hybrid measurably outperforms either mode alone. Deliberately not a chatbot: the point is proving the retrieval and ranking are correct, not synthesizing an answer on top of them.
TypeScript, Python, SvelteKit, Typesense, DockerSensei
A low-latency desktop AI agent that watches which UI elements you click in Logic Pro through macOS's Accessibility API and offers single-sentence guidance in real time. The perception loop streams structured JSON UI snapshots in under one millisecond, grounded by strict prompt engineering rather than a fine-tuned model.
Swift, Python, macOS Accessibility APIPongbot-MCP
A Model Context Protocol server that lets Claude control a Pongbot Nova S Pro table tennis robot over Bluetooth LE. Describe a drill in plain language and Claude translates it into the robot's binary wire protocol, including the authentication handshake the robot demands before it accepts a command. Working and actively developed, with an open problem documented in the README rather than hidden from it.
Python, Bluetooth LE, MCPExperience
Since 2012, distributed systems and enterprise data: RSA, Splunk, eight years at Elastic, then an independent shift into applied AI in 2025. The throughline is the same instinct in two eras: build the layer that makes a system trustworthy before it ships, whether that system is a distributed search cluster or a large language model.
Elastic
May 2017 to Aug 2025, continuous
Progressed from engineer to principal architect over one continuous eight-year tenure. Early years built and delivered technical curriculum and certification programs for the Elastic Stack; later years shifted to post-sales architecture discovery and customer engineering with Fortune 500 teams. Throughout: 200+ global deep-dive workshops on distributed cluster architecture, semantic search, and vector indexing for engineering groups of 100+ developers, enablement sessions at Elastic{ON} on APIs, observability, and semantic search systems, and recognition from senior leadership for a technical enablement session that helped unblock a multi-million-dollar federal account.
Splunk, RSA (EMC)
Jul 2012 to Apr 2017
Instructor-led technical training and content development for RSA Archer and threat analytics products, then a Splunk engagement integrating RSA Archer data with Splunk Enterprise Security in high-compliance environments, translating enterprise use cases into product-aligned solutions with technical sales.
Earlier
2003 to 2012
Workflow automation and network protocol engineering, across four companies, before the shift into distributed systems and enterprise data.
The work above (see Work) is where this all leads: MCP servers, evaluation gates, and multi-agent orchestration are the same discipline applied to a newer kind of system.
Creed
Context over parameters.
A model is only as reliable as the context it's given. Plumbline's governed context pack and Sensei's two-tier Accessibility map both hold because bounded, precise context eliminates more hallucination than a bigger model would.
Validate before you ship.
Generation and validation are different acts. Plumbline's gate blocks a plausible wrong answer before a stakeholder sees it; Atlas checks hard risk rules before any model gets a vote. A gate between generation and the reader, not faith in the generator, is what holds.
Blueprints, not one-off scripts.
Every decision behind this site, and the code it describes, is written down: an ADR before a pivot, a handoff before a build, a report after. That discipline is a methodology, not a one-off script, and it's the reason six sprints on this site so far have left a paper trail instead of just a diff.
Contact
The fastest way to reach me is email. Otherwise, find me on the channels below.
bharath@bharathk.dev