Skip to content

Portfolio

Seventeen systems, each graded on what it actually is.

Data engineering, applied AI, model evaluation, agentic systems, native software and developer tooling — with the maturity of every entry stated up front and the limits named.

The range, in numbers

Different kinds of work, one habit: build the ingestion path, the failure state, the evaluation harness, and the evidence needed to explain what the system did.

460,000+
job postings

and 1.4M structured skill records, in one explainable research corpus

84
audit findings

returned against my own pipeline; 34 of 35 high-severity confirmed on re-check

103,683
graph edges

across 28,473 nodes in a frozen, checksummed knowledge-graph checkpoint

100,000+
typed records

assembled from 1,700+ public web domains for an anonymized engagement

27 KB
semantic index

quantized, runs in your browser, sends no query to any server

The work

graded, not flattened

Most portfolios present a sketch and a measured system in the same shape. These are separated on purpose — a tier you can filter, and a limit on every card.

01Working systemApplied AI · Data

Explainable job compatibility engine

A Python pipeline that collects postings, extracts normalized skill evidence from unstructured text, versions the taxonomy behind every artifact, and ranks compatibility with deterministic reason codes. Candidate evidence, job demand, eligibility and lineage are separate contracts because they answer different questions.

460,000+ postings · 1.4M skill records

  • Python
What it does not claim

The score is directional compatibility — not a qualification, a hiring probability, or a validated measure of competence.

02Working systemModel evaluation

LLM fine-tuning pipeline and adversarial audit

A LoRA/QLoRA workflow rebuilt as separate testable stages, then put through a 48-agent adversarial audit rather than treating fluent output as proof of learning. The audit exposed a model reciting training material without the intended reasoning — which changed the data and evaluation contract instead of producing another prompt patch.

84 findings · 34 of 35 high-severity confirmed

  • LoRA / QLoRA
  • Python
What it does not claim

The framework trains and packages adapters. The current model is not presented as quality-proven until it passes live held-out evaluation.

03Working systemAgentic systems

Multi-model engineering and review system

A development harness coordinating specialized agents across planning, implementation, testing, security review and reconciliation. Work is claimed from a shared board, memory is integrity-checked, and reviewers can fail work back to an earlier gate.

180 build sessions · one replay: 10 agents, 4 model families, 302 minutes

  • Multi-agent orchestration
What it does not claim

Multiple agents do not make an answer correct. The value is explicit ownership, mechanical gates, and a trail a human can inspect. In the published replay a critic refused to sign off after three attempts — that refusal is part of the evidence.

04Live on this siteBrowser ML

Browser-local semantic search and RAG

Two local-first AI experiences built into this site. Search ships a quantized index, loads all-MiniLM-L6-v2 on first use, and embeds your question locally — a calibrated confidence floor returns no match rather than the least-bad result. The playground runs retrieval and a small language model through WebGPU, so no inference endpoint ever receives your prompt.

27 KB index · 384 dimensions · 0 queries sent

  • all-MiniLM-L6-v2
  • WebGPU
  • transformers.js
What it does not claim

A one-billion-parameter browser model is not a substitute for a larger evaluated model on a demanding task. It demonstrates local inference, grounding, citation, refusal and graceful fallback.

05Working systemNative software

Two native apps over one deterministic core

A cross-platform product built around a strict boundary: the rules engine is shared, the interface stays native — Jetpack Compose on Android, SwiftUI on iOS. A parity layer checks both clients against the same behavioral oracle.

2 native front ends · 1 shared engine · 0 duplicated rules

  • Jetpack Compose
  • SwiftUI
  • Shared core
What it does not claim

The shared core is deliberately narrow. UI, platform integration, release cadence and storefront work remain native to each platform.

06Research systemApplied research

Project EVE — controlled model-behavior experiments

A PyTorch framework measuring how controlled perturbations to transformer internals change output, separating dose configuration, hooks, orchestration, telemetry, evaluation and containment so a change can be compared against a deterministic baseline.

TinyLlama 1.1B FP16/CUDA: noise below 1e-5 changed nothing; 1e-4 was the first observable divergence

  • Python
  • PyTorch
  • CUDA
What it does not claim

A bounded result on one model and one setup. Not a universal statement about transformer behavior, not evidence of consciousness, and not a claim about untested scales.

07Research systemKnowledge systems

Local autonomous knowledge-graph system

A local system that grows, evaluates, repairs, queries and checkpoints a typed knowledge graph — with bounded growth epochs, expert seed review, reversible repair, Prometheus metrics and a 16-lane local-model orchestration mode.

28,473 nodes · 103,683 edges · 3,609 growth iterations · SHA-256 digest on a 676 MB database

  • Python
  • SQLite
  • Prometheus
What it does not claim

Graph size does not establish truth, completeness or useful reasoning. The review and calibration gates exist because autonomous growth amplifies bad seeds as efficiently as good ones.

08Research systemInfrastructure

Local LLM enrichment and evaluation framework

Reusable infrastructure for resumable batch work against OpenAI-compatible local endpoints. One shared core handles retry, server recovery, atomic output, JSON repair and threaded job driving; adapters apply it to extraction, classification and language normalization.

One core · four adapters · separate throughput harness

  • Python
  • OpenAI-compatible endpoints
What it does not claim

Throughput does not stand in for answer quality. The broader quality sweep is incomplete, so performance and task evaluation remain separate outputs.

09Research systemData engineering

Databricks medallion pipeline over the job corpus

A 30,000-posting sample ported into a Lakeflow Declarative Pipeline: Auto Loader into bronze, typed and deduplicated silver with in-flight expectations, and gold materialized views for mention frequency, co-occurrence and profile overlap. Delta Lake and Unity Catalog throughout.

30,000-posting sample · bronze/silver/gold

  • Databricks
  • PySpark
  • Delta Lake
  • Unity Catalog
What it does not claim

The sample is not representative, and this omits the local engine's evidence weighting, demand semantics, eligibility rules and calibrated confidence. It proves the data-plane shape, not the matching algorithm.

10Working systemAgentic systems

MCP-based personal assistant

A modular assistant built on the Model Context Protocol. An orchestrator routes requests to configurable agents; replaceable services handle memory, files, search, browser automation, email, credentials and security scanning. File access is grant-based and audit records are part of the design.

Grant-based file access · vector and full-text memory

  • Model Context Protocol
  • Telegram
What it does not claim

A single-user system, not a multi-tenant product. Personal messages, stored memory, credentials and local configuration are deliberately absent from this portfolio.

11Working systemDeveloper tooling

Codebase Flow Mapper

A live graph viewer for JavaScript and TypeScript repositories. It maps files, functions, imports, calls and basic database-query patterns, highlights orphan nodes and dead ends, and updates while the source changes.

Working MVP

  • JavaScript
  • TypeScript
What it does not claim

Function-call analysis is intra-file and import resolution is conservative. Cross-file symbol resolution belongs in a later version backed by the TypeScript compiler APIs.

12Live on this siteSecurity

Outbound-policy scoring demonstration

A policy engine that scores outbound destinations by observed evidence, expires stale support, and renders a default-deny nftables policy. Given a real two-minute capture it refuses to enforce anything — a process name is not a stable workload identity, and two minutes is not a baseline.

0 of 19 destinations enforced, and it says why

  • nftables
What it does not claim

The scoring and simulation path runs in the browser. The eBPF collector in the broader design has not been built.

13Client delivery, anonymizedData engineering

Public-web professional data pipeline

The crawl, extraction, normalization, validation and import path that turned heterogeneous public professional profiles into typed, queryable records — accounting for partial pages, conflicting schemas, duplicate identities, retries, provenance and resumable processing.

100,000+ typed records · 1,700+ source domains

What it does not claim

No client name, source record, private scoring method or internal database structure is published.

14Client delivery, anonymizedClinical software

Patient-facing clinical-genomics platform

A patient-facing symptom-analysis application built in TypeScript and Prisma with a deterministic analysis path, translating domain rules into a product a patient could use while keeping informational support separate from medical diagnosis.

Deterministic analysis path

  • TypeScript
  • Prisma
What it does not claim

Not described as a diagnostic system. No patient data, client identity, clinical method or compliance claim is published.

15Client delivery, anonymizedSports analytics

Deterministic hockey-analytics engine

A domain expert's analysis process taken from documents and sample data to a working proof: authenticated ingestion, an anonymization chokepoint, config-driven metrics, deterministic finding objects, coach-facing cards and explicit blocked-data states.

Working proof · anonymization chokepoint

  • Python
What it does not claim

The proof still depends on two external data definitions before production use. Not a finished product, and not analytical parity with the domain expert.

16Design only — not implementedModel evaluation

Model capacity inference

A framework for profiling a black-box language model with structured probe batteries and behavioral signatures, using only the semantic content of its responses — exploring whether repeatable behavioral measurement can map capability boundaries without weights or side channels.

Specified, not built

What it does not claim

Design only. No implementation exists.

17Design only — not implementedSecurity

Outbound network-policy collector

An eBPF collection agent that would observe outbound behavior per stable workload identity, build confidence-tiered policy evidence, and let an administrator simulate rules before enforcement.

Specified, not built

  • eBPF
What it does not claim

Design only. Only the downstream browser scoring demonstration exists today.

What this deliberately leaves out

Not every folder is a project. One-off diagnostics, recovered archives, private datasets, client-identifying artifacts and abandoned ideas are omitted. Work built under an employer is excluded from this studio portfolio entirely — that experience belongs on a résumé with the employer credited.

The restraint is part of the work. Breadth matters, but the more important signal is being able to tell the difference between an idea, a prototype, a measured system, and something another person can safely depend on.

The common thread is not a framework. It is turning messy inputs into typed, traceable data; separating a model's output from evidence that the output is useful; making automated work resumable and reviewable; building explicit failure and abstention paths; and leaving enough of a trail that someone else can operate the system.

If your data is unreliable or nobody has measured the AI feature, that is the work.

Thirty minutes. Bring the problem, not a brief.