Industrial data on a knowledge graph with provenance on every record, and AI on top. 2026: Distillery Studio, KEW and DaaS. 2025: Context AI + OpenEPA, Data Profiler, Calculation Editor, Ontology Editor and agentic engineering. Calculation Editor and Data Profiler are modules of the Immutably™ platform.
A refinery's SCADA history, LDAR surveys and device registers become an OGMP 2.0 methane submission, with agents that report, profile and distil.
The Knowledge Engineering Workbench: an upstream gas field as linked records, grouped, filtered and edited in the browser.
Decarbonization as a Service: an ammonia plant on satellite imagery, with production, CO₂e and intensity by process area and period.
AI client intelligence on a public emissions knowledge graph. Natural language to cited knowledge-graph answers.
Agentic, privacy-preserving data-quality platform. A 7-stage multi-agent pipeline (DSPy) that auto-generates data contracts and validation code.
Versioned calculation engine and collaborative workspace with visual lineage. Deterministic, not an LLM product.
Browser-based knowledge-graph editor with diagram, tree, split, and code views. Client-side import and export across four formats.
Internal Claude Code marketplace standardizing how dev teams build with AI. A Code Completeness Model framework, auto-enabled across teams.
Three products on the Context Labs knowledge graph, front-end designed and built by me. Distillery Studio and DaaS also appear in Context Labs' Distillery TV demos (Dell edition, ADIPEC 2026).
Distillery Studio: a refinery's sources, agents and running jobs in one workspace.
The data-source library for an OGMP 2.0 methane submission: SCADA historian, LDAR surveys, fuel gas, emission factors and the pneumatic device register, with the Reporter, Profiler and Distiller agents and live job progress (demo data).
KEW: an upstream gas field as a knowledge graph.
Well pads, wellheads, gas meters, equipment, liquids-unloading and blowdown events, gas samples and LDAR surveys as 105 linked records in 9 groups (demo data).
DaaS: an ammonia plant, by process area, on the map.
Process areas on satellite imagery, with NH₃ produced, CO₂e and emissions intensity for the period in view, filters by period, area and source, and CSV export (demo data).
Knowledge Engineering Workbench: the energy digital-twin dashboard, with Context AI driving Extract, Profile and Model from one plain-language command and pausing for approval at each step.
Inside a run: lineage from source to GPT-4o extraction to the Asset Integrity ontology (OWL), with the generated program, a data contract and Pandera validators.
Calculation Editor (Abacus): the data manifest with the equipment ontology tree and a live calculation lineage.
I define the company goal and the success metric first, build inside the workflow with the people who own the ground truth (account executives, data engineers and scientists, and domain experts), then skip the design-handoff chain and prototype straight in production code, fed by the right libraries instead of building from scratch.
It started with industrial digital twins on our Knowledge Graph in Immutably™. That insight infrastructure became the foundation for five AI products, open EPA analytics, an agentic data-quality platform, a versioned calculation engine, a browser ontology editor, and an org-wide AI-adoption framework. Each is framed below the way I run it: goal and North Star first, then the tradeoff, then the impact. Newest first: the three products of 2026, then the story from where it started.
Goal: give an emissions analyst one place to go from a refinery's raw sources to a defensible OGMP 2.0 methane submission, with every figure traceable.
I designed and built the front-end of the Distillery workspace: a library of data sources (SCADA historian, LDAR surveys, fuel-gas logs, emission factors, device registers), the Reporter, Profiler and Distiller agents, projects such as an OGMP 2025 submission, running jobs with live progress, and chats that keep their findings. Watch it above.
Tradeoff (Real estate): one workspace for sources, agents, running jobs and saved findings instead of four tools, because the analyst's question spans all four.
Tech stack: Vue 3 + Nuxt • TypeScript • Context Labs design system • agent and job-status UI • ⌘K search • light and dark themes
Goal: let knowledge engineers see and shape the graph under every product: assets, equipment, measurements and events as linked records, not tables.
I designed and built the KEW front-end. The records view lays out an upstream gas field as a graph: well pads, wellheads, gas meters, equipment, liquids-unloading and blowdown events, gas samples and LDAR surveys, grouped and filterable, with a classes view beside it. Watch it above.
Tradeoff (Breadth vs Depth): one general records-and-classes graph view instead of a bespoke screen per asset type, because the ontology changes faster than screens can.
Tech stack: Vue 3 • TypeScript • graph layout with grouping, collapsing and hidden-record counts • legend by ontology category • zoom, fit and filter controls
Goal: show a plant's production, emissions and intensity the way operators think about the plant: by process area, on the ground.
I designed and built the DaaS front-end: the facility on satellite imagery with process areas as polygons, a facility panel with NH₃ produced, CO₂e and emissions intensity for the period in view, scope filters by reporting period, process area and emission source, weekly production and CO₂-capture charts, and CSV export. Watch it above.
Tradeoff (Required vs Optional): map-first, with process areas as the primary filter and charts secondary, because operators reason in plant areas, not tables.
Tech stack: Vue 3 • TypeScript • satellite basemap with process-area polygons • linked filters across map, panel and charts • time-range scoping • CSV export
After building Immutably™'s Knowledge Graph technology to create industrial digital twins, we had a powerful insight infrastructure. Energy clients were using it to model entire facilities, but the KG capabilities (ontology mapping, sub-second queries, data provenance) could do so much more.
We spotted the opportunity: EPA's GHGRP emissions data was public but difficult to use. Researchers spent weeks wrangling Excel files, journalists couldn't cite sources, and custom calculations had zero reproducibility. Our KG technology could solve all three problems at once.
I led user research with environmental researchers, journalists, and sustainability analysts. The pain points were clear: 2+ hours of manual prep work per analysis, black-box calculations, and no way to verify results. We had the technology, now we needed the product.
I built the OpenEPA POC using Claude to prototype the Q&A interface, connecting it directly to our existing KAG (Knowledge-Augmented Generation) infrastructure. The pilot validated our hypothesis: researchers could ask natural language questions and get cited, verifiable answers from 15 years of EPA data.
In parallel, we built Context AI, a microservice for energy sector client intelligence. Using Vue 3 + TypeScript, I created an AI-powered onboarding flow that extracted company context in 60 seconds instead of 2+ hours. The frontend was built with mock services to unblock development while the backend caught up, saving 3 weeks.
Impact: Context AI generated $85M in attributed pipeline for our AE team. OpenEPA pilot attracted 100+ early users from research institutions and NGOs.
With the POC validated, we built the full OpenEPA platform infrastructure. I designed the EPA data ingestion pipeline with version tracking where every emissions report is timestamped with its EPA source URL and release date. This wasn't just about loading data; it was about creating an audit trail that researchers and journalists could trust.
We integrated ArcadeDB as our Knowledge Graph store, leveraging the same ontology-mapping capabilities we'd built for Immutably™. The result: sub-second queries across 2,800+ facilities and 15 years of emissions history. Researchers could compare facility emissions trends, identify geospatial hotspots, and benchmark Top/Bottom 5 emitters, all with full data provenance showing exactly where each number came from.
Tech Stack: ArcadeDB for Knowledge Graph storage, custom ontology for emissions data modeling, EPA GHGRP API integration with delta sync, version-controlled data pipeline with rollback capabilities. Deployed on cloud infrastructure with 99.9% availability targets.
Goal / North Star: help energy account execs reach trusted client decisions faster, and give researchers verifiable access to public emissions data. North star: trusted answers delivered per hour of analyst time.
With the EPA data pipeline running, we deployed Context AI on Azure to power the intelligence layer. The challenge was connecting AI models to our Knowledge Graph so they could answer complex emissions queries with full citations. We used Azure OpenAI Service with GPT-4, building a custom integration layer that translated natural-language questions into KG queries and synthesized responses with EPA source attribution. I built the Vue 3 + TypeScript client on top.
The Context AI microservice became the bridge between our KAG infrastructure and both OpenEPA (for emissions Q&A) and the energy sector AE dashboard. For OpenEPA, researchers could ask "Which Texas refineries increased emissions most from 2020-2023?" and get cited answers with EPA report URLs. For the AE dashboard, Context AI analyzed client KG data to generate company intelligence in minutes instead of hours.
Tradeoff (Ship vs Don't-ship): I shipped against a hard trust bar rather than maximizing answer coverage. Anything we couldn't cite, we didn't surface, because the audience (AEs closing deals, researchers, journalists) can't act on a black-box number.
Deployment Details: Azure OpenAI Service (GPT-4 model), Azure Kubernetes Service for microservice orchestration, Redis for session caching, custom KAG integration layer for query translation. Engineered to a target P95 of ~2s on complex emissions queries and to support 100+ concurrent users with auto-scaling.
What I'd drive next (Team Levers): ① cited-answer rate, share of queries returning a sourced answer rather than a deflection (primary quality lever); ② time-to-first-trusted-answer, protect the latency bar as coverage grows; ③ weekly-active AEs / repeat-query rate, the retention lever proving it became a habit, not a demo.
Goal / North Star: make industrial and emissions calculations reproducible and comparable across facilities, so a number can be trusted, audited, and re-run a year later. North star: reproducible calculations adopted in real reporting workflows.
I built the front-end myself, a Nuxt 4 + Pinia + shadcn-vue workspace with a visual calculation-lineage graph and a dataset-binding / join configurator, on a versioned Workspace → Routine → Execution model. The team's backend handles the heavy lifting: Java 21 with a dual API (REST + GraphQL via Netflix DGS), PostgreSQL + Liquibase, Apache Spark 3.5 for distributed materialization, and a property-graph query surface over roughly 484 facilities, 62k equipment, and 10k edges. This one is deterministic, explicitly not an LLM product.
Tradeoff (Invest vs Maintain): I invested in versioning, formula transparency, and audit trails up front rather than shipping a faster one-off calculator. For analytics people stake reports on, reproducibility is the product; a clever but opaque number is a liability.
Calculation lineage (5 calcs · 8 links) with a visual join / dataset-binding configurator, bind a dataset, choose join type, and map columns.
Tech stack: Java 21 • REST + GraphQL (Netflix DGS) • Nuxt 4 + Pinia + shadcn-vue • PostgreSQL + Liquibase • Apache Spark 3.5 • property graph (in-memory / ArcadeDB) over ~484 facilities, ~62k equipment, ~10k edges. Users see the exact formula, methodology docs, and an audit trail, and can normalize emissions by output to compare facilities apples-to-apples.
Goal / North Star: make data trustworthy before it reaches a model or a report, without ever exposing the underlying data. North star: datasets shipped with a passing, machine-checkable data contract.
This is the clearest orchestration story. I built the Vue 3 + TypeScript UI over a 7-stage multi-agent pipeline coordinated with DSPy, Planner → Profiler → Baseline Observer → LLM Observer → Reviewer → Summarizer → Report Generator. It auto-generates data contracts (datacontract.com format) plus Python and Scala validation code, and connects to CSV, LakeFS, Delta Lake, Delta Sharing, and REST APIs. The pipeline routes LLM calls through LiteLLM across Azure, OpenAI, Anthropic, and self-hosted Ollama, so the same product runs in the cloud or fully air-gapped. This is what "orchestrated multiple model providers and deployed our own models" looks like in production.
Tradeoff (Required vs Optional): I made privacy a hard requirement: the LLM stages see synthetic samples only, never real data. That caps how much raw context a model gets, but it's exactly what makes the platform usable on regulated and air-gapped EU data, which is the whole point.
Stack & orchestration: 7-agent DSPy pipeline • LiteLLM across Azure / OpenAI / Anthropic / Ollama (air-gapped) • FastAPI + Polars (optional PySpark) + Vue 3 • synthetic-only LLM sampling • auto-generated data contracts + Python/Scala validation • CSV, LakeFS, Delta Lake, Delta Sharing, REST connectors.
What I'd drive next (Team Levers): ① issue precision, share of agent-flagged issues a reviewer confirms real (primary; false positives kill agentic tools fastest); ② contract coverage, % of onboarded datasets with an accepted contract; ③ cost / latency per dataset across providers, route cheap/local for routine profiling, premium models only for the LLM Observer.
Goal: let domain experts author and convert ontologies in the browser, no toolchain, no install, no format lock-in.
I ported it from an existing Flutter app and built the Nuxt 4 + Vue 3 UI: a Vue Flow + dagre graph layout, a CodeMirror code view, and multiple view modes (diagram, tree, split, code). It imports and exports four ontology formats entirely client-side, LinkML YAML, OWL RDF/XML, CLCE, and OSE, on the Context Labs UI library (shadcn-vue, 80+ components).
Tradeoff (Breadth vs Depth): I prioritized format breadth and a frictionless browser experience over deep single-format tooling, because the real adoption blocker was that experts couldn't move between formats without engineering help.
Editing one ontology across diagram, tree, and code views, live.
The Ontology Editor in use: switching view modes and editing a knowledge graph in the browser, with instant export across LinkML, OWL, CLCE, and OSE.
Tech stack: Nuxt 4 + Vue 3 • Vue Flow + dagre layout • CodeMirror • diagram / tree / split / code views • client-side import/export for LinkML YAML, OWL RDF/XML, CLCE, OSE • shadcn-vue (80+ components) • ported from Flutter.
Goal / North Star: turn "people use an AI tool" into "the org ships AI-assisted code to one standard." North star: AI-assisted changes that meet the quality bar without rework.
I helped build a private Claude Code plugin marketplace for our dev teams, on a Code Completeness Model (CCM), a reusable reasoning framework covering 10 quality aspects (design, error handling, security, testing, and more) across project, module, and function scope. Five skills, CCM, TypeScript, Vue, Nuxt, shadcn-vue, totaling roughly 22,000 lines of guidance across ~140 files. It auto-enables for teammates via project settings, so AI-assisted code follows org standards by default, on Anthropic Claude.
Tradeoff (Invest vs Maintain): I invested in one shared, versioned framework rather than letting each team prompt its own way. The upfront authoring cost buys consistency and review leverage that ad-hoc prompting can't, and it scales to new hires automatically. Capability is easy; adoption is the product.
What I'd drive next (Team Levers): ① rework / review-comment rate on AI-assisted PRs vs baseline (primary, the proof the standardization paid off); ② skill attach rate, % of repos/PRs where skills auto-enabled and were invoked; ③ time-to-first-quality-PR for new hires, the onboarding lever showing the framework compounds.
As we prepared for OpenEPA's public launch, we formalized our team structure. We established an R&D office in Amsterdam with a small, focused team tracking work through a Kanban board and running bi-weekly retros. This wasn't just about process but about culture. We transitioned from an Engineering-led approach (build features, ship code) to Product-led (solve user problems, measure impact).
This transition actually started earlier with my work on the Immutably™ platform, where I shifted the company from feature-driven development to user-research-driven product strategy. With OpenEPA, Context AI, and Calculation Editor, we applied those same lessons: validate with users, ship MVPs fast, iterate based on feedback, and measure everything.
Launch Metrics: OpenEPA engineered to a 99.9% availability target, a target P95 of ~2s (within our 2.5s budget), 100+ concurrent users, and <24-hour data freshness from EPA. Context AI generated $85M in attributed pipeline (AE attribution). Calculation Editor enabled reproducible research with verifiable, fully-sourced calculation certificates.
The result: three platforms, OpenEPA, Context AI, and Calculation Editor, working together to democratize access to industrial data and power data-driven decisions across energy, sustainability, and compliance sectors.
AEs said "we need better client data" but shadowing revealed they spent 2+ hours manually researching companies. I built AI onboarding that extracts context in 60 seconds, solving the real workflow problem, not the stated feature request.
A capable AI tool no one opens has zero impact. The CCM marketplace auto-enables for teammates, so AI-assisted code follows org standards by default. Reliable, default adoption is the hard part, not the demo.
In Data Profiler I route LLM calls across Azure, OpenAI, Anthropic, and self-hosted Ollama via LiteLLM. EU and regulated data need an air-gapped path, so multi-provider orchestration is a product requirement, not a nice-to-have.
Researchers won't use black-box calculations. Every OpenEPA query cites EPA source, version, and timestamp; Calculation Editor shows exact formulas. Verifiable provenance is table stakes for trust.
Introduced agile product practices to Context Labs: sprint planning, iterative delivery, user feedback loops, and cross-functional collaboration. Transformed from ad-hoc feature development to systematic product delivery.
Agile-impact figures are internal Context Labs estimates comparing before/after the move to systematic product delivery.