Generating content on a word game can be really time consuming, so here’s the way I did that in Another Word:
At first, I wanted to simply use a list of words like [felines, leopard, cat, tiger, lion], with the first item being the theme, and the second item being the word unlocked from the start to help the player find other words. It was working in most cases, but unfortunately, there were two issues: first, some grids were just impossible to make. Second, some grids had unconvenient height/width ratios and required some human verification. So in the end, I went with a grid generator tool and refreshed the grid until I got the right one for each level, resulting in a bigger json file, but with more control over the UX and the content of the game.
Regarding the content itself, I wanted to be wide regarding global knowledge I creating some categories to help writing themes. Then, I iterated keeping in mind to have enough letters shown at the beginning of the game, and avoiding long words for UX constraints. The game is in French and in English. For the English version, multiple themes implied difficulties regarding regions. English being a broad language, localized themes had to be redesigned (eg. specific geography or local culinary taste).
Here’s the first line of the resulting Google Sheet.