Build logs & notes.
Writing on full-stack engineering, AI/ML, and the tools in the Lab — the build process shown, not just the result. Read in full here; syndicated to Medium with a canonical link back.
Follow on Medium
Every post here is also on Medium — follow there if that’s where you read.
RAG from scratch, with grove
Retrieval-augmented generation explained from the ground up for working developers — built around grove, a real RAG engine I'm writing in the open. Mental models first, then the actual build decisions.
- 01Context is a bucket of water“Context” gets thrown around dressed in engineer terminology — tokens, windows. A simpler mental model: it behaves like a bucket of water.
- 02The AI isn’t the same person twiceYou can ask an AI the exact same question on two different days and receive two meaningfully different answers. Here is why — and how to work with it.
- 03What RAG actually is, for people who build CRUD appsRetrieval-augmented generation gets explained either as a vendor diagram or a wall of vector-math. Here it is as something a web developer already understands: a WHERE clause that runs before the model does.
- 04Embeddings without the linear-algebra lectureEmbeddings get taught with a matrix and a rotating scatter plot. You don't need either to use them. Here's the only mental model that matters — a map — plus the three catches the quickstarts leave out.
- 05I Built a Tool That Slashes the Cost of Feeding Docs to AIMarkdown files are the silent money pit of many LLM workflows. mdcompress strips the parts AI does not need, so your docs cost less to read.
- 06I built a RAG engine that skips the vector databaseThe default RAG recipe chunks your docs and embeds them into a vector store. grove doesn't. Here's the build log: why tree-of-contents retrieval, how the descent works, why rebuilds are free — and where it's honestly worse.
In the works
8 queued · 8 publishedWhat RAG actually is, for people who build CRUD apps
Retrieval-augmented generation gets explained either as a vendor diagram or a wall of vector-math. Here it is as something a web developer already understands: a WHERE clause that runs before the model does.
Embeddings without the linear-algebra lecture
Embeddings get taught with a matrix and a rotating scatter plot. You don't need either to use them. Here's the only mental model that matters — a map — plus the three catches the quickstarts leave out.
I built a RAG engine that skips the vector database
The default RAG recipe chunks your docs and embeds them into a vector store. grove doesn't. Here's the build log: why tree-of-contents retrieval, how the descent works, why rebuilds are free — and where it's honestly worse.
An image converter that never uploads your image
Browsers have shipped everything you need to convert and compress images locally for years. Here's how the Lab's converter works in three built-in APIs — and the two format gotchas that quietly bite.
Turning a single-page portfolio into a prerendered, multi-route site
Adding React Router and vite-react-ssg to a 3D-heavy portfolio: static HTML and per-route meta tags with no SSR server, and keeping the heavy WebGL bundle off the lightweight tool and blog pages.
I Built a Tool That Slashes the Cost of Feeding Docs to AI
Markdown files are the silent money pit of many LLM workflows. mdcompress strips the parts AI does not need, so your docs cost less to read.
The AI isn’t the same person twice
You can ask an AI the exact same question on two different days and receive two meaningfully different answers. Here is why — and how to work with it.
Context is a bucket of water
“Context” gets thrown around dressed in engineer terminology — tokens, windows. A simpler mental model: it behaves like a bucket of water.
New posts land here and are syndicated to Medium with a canonical link pointing back. Follow along via RSS.