Hal — local RAG AI assistant
Python, Ollama, MCP, NumPy
A privacy-preserving retrieval-augmented assistant that answers strictly from a personal knowledge base and runs entirely offline. Built from first principles: heading-aware chunking, a NumPy vector store with cosine similarity, and incremental re-indexing keyed on content hashes. Exposes its search as an MCP server with path-traversal guards. Spawned two specialised tools: hambot, an AI archivist that catalogued a real 594-source corpus into ~18,000 cross-links with zero broken links using a VRAM-aware 7B-vision / 30B-text pipeline on a single GPU; and hal-voice, a hands-free voice interface (wake word → Whisper STT → synthesised speech).
Read the write-up →
Probe Request Sniffer — passive Wi-Fi device counting
Python, scapy/pyshark, 802.11
A passive 802.11 sniffer that sees through MAC randomisation by fingerprinting each frame's information elements, so one physical device maps to one identity. Pluggable capture backends behind a clean abstraction, a thread-safe sliding-window tracker with lazy expiry, and an ergonomic CLI.
Read the write-up →
LIDAR Autonomous Navigation
Lua, A*, control theory, linear algebra
A real-time autopilot that sweeps a laser to build a live obstacle map, plans with a tick-sliced A* search, and follows the route with pure-pursuit steering and Catmull-Rom smoothing — all inside a hard 4096-character microcontroller limit that forced genuine optimisation. Uses 3D rotation matrices for attitude compensation and an O(1) hash-set spatial map.
Read the write-up →
Hatch — AI desktop companion
Electron, React, TypeScript, SQLite, FastAPI
An ~10k-line Electron desktop pet with a deterministic simulation engine, a ~30 Hz desktop-presence system using transparent overlay windows, event-sourced SQLite persistence with versioned migrations, and an optional supervised Python AI sidecar behind a typed IPC boundary.
Read the write-up →
More projects — including an autonomous recovery drone and a Canvas API archiver — at eoinforrest.me/projects and github.com/NotEoin.