How I created an annotation extension for The New York Times
By Shirling Xu

I read The New York Times every day. Typically, I like to annotate everything I read (consider all the books I read on the Libby app a war-zone). I noticed that as with most journalism and media sites, when I read articles on the web, there’s no highlight feature. If I wanted to take notes, I had to pull up my Notes app alongside the article, copy over any interesting quotes, and write down my own thoughts.
In 2022, I told Hans Klein, one of my mentors and favorite professors in college, about how I wished The New York Times had an annotation feature. As The New York Times’s second-biggest fan (with me being the first), he completely agreed. “Why don’t you build one yourself?” he asked. I spent several months reading and exploring the concept of social annotation and existing annotation tools but never got around to building the feature.
Three years later, The New York Times still doesn’t have a highlight or annotation feature so I built one. I personally wanted to solve one of my own user pain points, but I also wanted to try experimenting with LLMs to see if I could make something functional.
I tried using Claude, ChatGPT, and Gemini to see if I could build this as quickly as possible. A mini hackathon!
I wrote a list of features I wanted this extension to have:
I also considered some additional good-to-have features such as changing the highlight color, enabling dark mode on the article, etc. but prioritized the aforementioned list first.
I used Claude to set up the foundation for my Chrome extension. It generated all of the necessary files like the Manifest, JavaScript, HTML, and CSS. But as with anything LLMs generate, there’s usually many problems from hallucinations and whatnot.
The highlight feature worked, and then it didn’t. The long notes I wrote didn’t save. The annotations disappeared after I refreshed the page.
I tested the Chrome extension in Developer Mode, and I jotted down the bugs I found in my Notes app. Since I come from a technical background, I balanced between making fixes on my own and using Claude, ChatGPT, and Gemini to help debug issues. I dug deep into the code.