What I’ve built

Tools I maintain, experiments I share, and the work behind them.

Some of these paid the bills; some existed only because I wanted to know how the thing worked. Every one has a page explaining the problem, the architecture, the parts that broke, and what I would do differently. Filter by what you care about, or hit / and search.

16 projects
Featured ThinkLess decision trace viewer
PythonAgentsEvaluation

ThinkLess

A Python library for agent decisions. Rules and small models handle routine cases, an LLM handles the rest, and each decision is traced. The docs include benchmarks and examples you can run yourself.

2026Pre-1.0 Source
Featured
Vanilla JS vLLM Docker

Easy-vLLM

Works out which vLLM settings your GPU can actually run. Type a model id, pick your card, and get a working vllm serve command, a vendor-correct Docker setup and an honest VRAM verdict, including how many concurrent requests will fit. Runs entirely in the browser, nothing to install.

2026 Live demo Open it
Featured
Python pandas PyYAML

CleanFrame

A reproducible data-cleaning engine for Python. An LLM writes the cleaning plan once; that plan compiles to a YAML recipe which replays in pure pandas with zero API calls, tracks every changed cell, and refuses to run when the incoming schema has drifted.

2026 On PyPI Source
vLLM FastAPI PostgreSQL

Docuvera360

On-prem agentic analytics. Plain-language questions over ERP databases, spreadsheets and documents come back as checked answers, dashboards and alerts in minutes. Code recomputes the figures the model proposes, and published boards run with no model at all.

2026 Principal AI Engineer Closed source
Featured
Flask Celery Redis Whisper

MoM AI: Minutes of Meeting

Meeting recordings in, structured minutes out. FFmpeg normalizes the audio, a Celery worker routes it to one of six speech-to-text backends, including Whisper on your own machine with no API key, and an LLM writes the summary, decisions and action items. Both layers swap at runtime.

2026 Open source Source
Flask Whisper Parakeet Docker

Speech Annotation Tool

Folder in, reviewed speech dataset out. Tracks a folder of audio, cuts it at silences, transcribes with a local model or a hosted API, and lets a team correct the text together. Jobs pause, resume and survive a crash. Self-hosted with Conda or Docker.

2026 Open source Source
Python NumPy Flask

AudioFP

Self-hosted audio search built on the Shazam landmark algorithm. Identifies a clip from three seconds of audio, or indexes short patterns and finds every place they occur across thousands of call recordings, with timestamps. Streams hour-long files in tens of MB, scores matches so chance hits are dropped, ships with an API, a CLI and a web UI.

2026 Open source Source
Python SQLite FTS5 sentence-transformers

contextsearch

Self-hosted search over your own documents. BM25 on SQLite FTS5 and embeddings fused with reciprocal rank fusion, optional cross-encoder reranking, watched folders with revisions, and every result carries its page, passage and the reasons it ranked where it did.

2026 Open source Source
Python Django scikit-learn

Movie Recommendation System

Content-based movie recommendations from a training pipeline and a Django app. TF-IDF over genres, keywords, studios and plot text, reduced to 500 dimensions with SVD. Only the top 50 neighbours per film are stored, so a 26,000 film model is 16MB and a lookup takes about a millisecond.

2025 Open source Source
TensorFlow Keras Flask

Skin Cancer Detection

Seven-class skin lesion classifier trained from scratch on HAM10000. The custom CNN head uses 1x1 and kernel-sized convolutions instead of dense layers, with a concatenation-skip ResNet variant alongside. Ships with a Flask API and a webcam service.

2024 Open source Source
Featured
Vanilla JS HTML CSS

Py Internals

An interactive Python course where every lesson is a hand-authored memory snapshot (frames, bindings, heap objects, refcounts) that you step through like a debugger. Nine sessions covering names, objects, execution, concurrency, exceptions and imports.

2026 Actively shipping Source
Python Flask scikit-learn

FIFA Player Recommendation System

FC 25 player similarity over 34 min-max normalized attributes. The full pairwise cosine matrix is precomputed at training time and pickled, so Flask loads it once at startup and every query becomes a row lookup plus a couple of filters.

2024 Open source Source
TensorFlow Keras Python

Autoencoders & Decoders

Three autoencoders (PCA-style linear, convolutional and denoising) sharing one encoder/decoder interface behind a five-mode CLI. A 32-number code gives 96x compression on STL-10 and drives k-NN image retrieval and latent-space morphing.

2024 Open source Source
Python NumPy scikit-learn

ML Algorithms from Scratch

28 machine learning algorithms in plain NumPy, from linear regression to XGBoost and UMAP. Each one has a runnable demo and a guide that explains the maths and maps it onto the code.

2025 28 algorithms, NumPy only Source
Flask SQLite Chart.js

HabitFlow

A habit tracker that stays on your machine and tells you what your ticks add up to. Flask and SQLite behind a monthly check-off grid, streaks and plain-language insights, Excel export to three formatted sheets, and a local JSON API. A per-user Windows installer ships it, and it quits when you close the tab.

2026 Open source Source
HTML CSS Vanilla JS

Portfolio Website

This site. Static HTML pages over one CSS custom-property design system, with pointer-tracked card glows and Intersection Observer reveals in plain JavaScript. No framework, no bundler, no build step: pushing to main is the whole deploy.

2025 Actively maintained Source

Say hello

Want one of these, but for your problem?

Happy to talk through architecture, trade-offs, or why the obvious approach is not working. Email is fastest.