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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.