Tracing a chart screenshot back to the run that made it
gglineage writes an ID into a ggplot2 chart as a faint row of dots, so a screenshot that has lost its file name and metadata can still be traced to the script and data behind it.

I lead technology for Sensory AI at NielsenIQ, where we build machine learning models of human taste.
I’m a statistician and software engineer. Our models predict how people perceive flavor and texture, and what they end up preferring. I joined NielsenIQ when it acquired Gastrograph AI in 2025, where I was Head of Technology.
Outside work I build smaller things: ChatGPT plugins, AI agents I can run from my phone, and a tool that traces where a plot came from.
I live in Spring Lake with my wife, our son, and a standard poodle.
gglineage writes an ID into a ggplot2 chart as a faint row of dots, so a screenshot that has lost its file name and metadata can still be traced to the script and data behind it.
A radar module, an I2C-to-UART bridge, and a 4.3-inch ESP32 screen. The signal chain works and the scope runs at 30 FPS. It hasn't looked through a wall yet.
Notes on an iPhone app that shows text one word at a time, what the research says that kind of reading costs, and the design choices I made to pay it back.