Skip to content

Things I built end to end

Every project here started as a problem I could not buy my way out of. The write-ups lead with the decision that was hard rather than the framework that was used.

Projects
7
Case studies
7
Categories
4

All projects

7 projects

Systems2026Project lead

Multi-Tenant Legal RAG Assistant

A legal-document retrieval system with two ingestion engines, hybrid search and per-session document isolation: a FastAPI backend behind a Cloudflare tunnel serving a static React SPA.

Retrieval fuses BM25 and dense-vector *ranks*, not scores. A cosine distance and a BM25 score share no scale, so any normalisation between them ends up tuned to one corpus and wrong on the next. The lexical leg exists because an embedding blurs exactly the rare token, “Section 302”, that made the question specific.

  • FastAPI
  • Celery
  • Redis
  • ChromaDB
  • BM25
  • +3
Kurt's tutor chat interface showing a grounded answer with an inline-rendered mathematical equation
AI/MLMay 2026 to Jul 2026Project lead

Kurt, an Offline-First AI Tutor

A fully local desktop assistant that transcribes lectures, answers questions grounded in your own documents, and compiles the result into typeset PDFs. No network required.

Tkinter has no MathJax, so multi-line equations are intercepted from the model's output and rendered through matplotlib's typesetting engine into transparent PNGs embedded inline: real mathematics in a desktop chat window, entirely offline.

  • Python
  • faster-whisper
  • Ollama
  • ChromaDB
  • LangChain
  • +3
WebJun 2026 to Jul 2026Project lead

F1 Telemetry Dashboard

Live and historical Formula 1 telemetry: speed, throttle, brake, RPM, gear, DRS, tyre strategy and a GPS track map, streaming from F1's official timing feed with no paid tier.

Drivers cross the line at different moments, so speed-against-time never lines up. Telemetry is interpolated onto a uniform five-metre distance grid, which is what makes two drivers genuinely comparable at the same braking point.

  • Streamlit
  • Plotly
  • FastF1
  • SignalR
  • pandas
  • +2
AI/MLJan 2026 to Jun 2026Project lead

Image-to-LaTeX Handwriting OCR

A 2D-attention encoder-decoder that reads handwritten text and mathematical expressions and emits LaTeX autoregressively: ResNet-18 features into a four-layer Transformer decoder over a 1,007-token vocabulary.

A flattened feature map loses the two-dimensional layout that makes a fraction a fraction, so the encoder carries separate sinusoidal encodings for the X and Y axes. The decoder can tell what sits above the bar from what sits below it.

  • PyTorch
  • ResNet-18
  • Transformers
  • AMP / FP16
  • Flash Attention
  • +1
Pareto curve plotting Vision Transformer accuracy against inference latency across compression settings
ResearchMar 2026 to Apr 2026Project co-lead

ViT Compression Trade-offs

Four Vision Transformer compression paradigms (token merging, threshold masking, post-training quantisation and entropy-based head pruning) mapped across a 24-combination sweep of the Pareto frontier.

Deleting tokens outright breaks the 2D spatial grid that hybrid convolutional models need, so token importance is proxied by L2 norm and low-importance embeddings are zeroed instead. The tensor keeps its shape and the downstream convolutions still work.

  • PyTorch
  • ToMe
  • bitsandbytes
  • NF4 / INT8
  • timm
  • +2
AI/ML2025

Hand-Gesture Drawing Tool

Draw in the air: real-time hand tracking turns fingertip position into geometric constructions on a live camera feed, with both hands working independently.

A pinch is not a distance threshold, because fingers approach at an angle. Detection combines distance and angle, and a One Euro filter then removes tremor without adding the lag a fixed-window average would.

  • MediaPipe
  • OpenCV
  • Python
  • NumPy