Sorry to hear about all the stresses you were dealing with but if it's okay, i'd like to follow up on your sudoku solver.
Are you doing the brute force/general way or are you implementing sudoku specific logic?
Here's my understanding of the general way: it tries to insert different values in different squares until it finds a conflict.
A sudoku specific way, in my mind, would implement the algorithms we humans use to solve a sudoku. E.g., look at a block, see which numbers are missing, see if open squares in that block can be filled with numbers by eliminating options along the vertical or horizontal of that square.
Hope this isn't too callous given everything else you wrote. Also, big fan of journaling which you too have called out.