Okay. It should now pick up your timezone via js. Unfortunately right now you won't notice it until the second request. I could have js refresh the page when it detects that the tz needs to be set/changed, but I don't want to do that until I am totally certain it cannot end up in an infinite refresh loop.
If I understand it right, you are sending the timezone info back to the server? If so, why does the server need to know at all? Just use that info to set the background of the 'today' calendar cell in the client side.
To determine which range of dates gets shown and to calculate the number of days in your current streak. I guess could do the latter on the client, but what if it's Aug 31st in CA and Sept 1st in MA and the user is in month view? I'm not yet ready to go all js.