The New York Times crossword is behind a paywall, and the official app is full of ads even when you pay. I like doing old crosswords, the ones from the 70s and 80s where the clues reference things that no longer exist. Someone had already scraped the puzzles from January 1976 through December 2017 into JSON, so I built a page that plays them with no ads and no account.
The data
The scraped JSON wasn't in the shape react-crossword wants, so I wrote a Python script to convert every puzzle once. The output lives in a second repository as one file per date, and the player fetches the file for whichever date you pick straight from GitHub. There's no server. The source is missing August 10 to November 5, 1978, and August 30, 2015 to May 1, 2016, so the player is too.
The player
A date picker at the top takes any date from January 1, 1976 to December 1, 2017, and the 1976 puzzle is baked in so there's something on screen while the first fetch happens. When you finish a word correctly the clue turns green and gets crossed out. The only buttons are Focus, Fill all answers, and Reset. There's no timer or scoring because I wanted it to feel like a crossword on paper.
I considered building the grid from scratch instead of using react-crossword, which already handles keyboard navigation and answer checking. Writing all of that from zero would have taken weeks and the result would have been worse.