Good question! I used an open chess database of a few million games, then filtered for master level play with both players >2000 elo. These get stripped for middle game positions, so after move ~12 and while there’s enough material left on the board. Stockfish is then used with a high multi-pv to calculate move quality for all available moves.
Stockfish is run in two passes, one fast and one slow. The fast one gets rid of positions unlikely to make good puzzles (only one good move, one side clearly winning, etc.) while the slow one calculates move quality more accurately. Moves are rated relative to the best move in the position, with loss scored in centipawns (1/100th of a pawn). So, losing a pawn for nothing would be ~100 centipawns of loss. Anything over 300 centipawns lost is a blunder, and all blunder moves are scored equally bad.
Each puzzle takes a strong computer ~10 seconds to generate, but I managed to compile about 30,000 for the site. I plan to add more in the future for specific players/tournaments/openings!