Finished! Enjoyed it so far. Found myself wanting the ability to differentiate between a tile that's blank because it's the default state, and blank because I've deduced it should be blank in the solution(s), mostly in the later B levels.
Alternate solutions for B4 and D7: https://imgur.com/a/3JbCg4a