Ah, how nice to open blank.page without being welcomed by error messages in the dev console. In fact, let us list the changelog for the day:

1. Redirected www.blank.page to blank.page.

Formerly, going to www raised a certificate error.

Tweaking nginx is both fun and frustrating, because it’s powerful but not very given to iterative approaches (try, verify, try again) since [as far as I understand] you have to restart in order to reload the configuration. This brings down my entire nginx instance, blocking the games for a couple of seconds. Note to self: eventually migrate to a separate virtual server.

After finishing this, I walked the dog.

2. I installed a new service worker

We were having mixed content warnings and cache failure messages in the console. The cache seemed to be flaky, sometimes loading very old versions of the codebase. I looked inside but I couldn’t understand anything. I basically swapped the code with another approach to the problem and this time it worked like a charm.

After finishing this, I washed the dishes

3. Changed the behavior of the self-hiding toolbar

Since we want blank.page to be, well, blank, we want to _reveal stuff only when you need it. So we came up with some heuristics like: if the user moves the cursor near the top of the screen then reveal the tool bar. If the challenge was successful then reveal the toolbar. If the user starts typing hide the toolbar. And so on.

Well, if you so this then you will run into conflicting rules like “if the mouse is idle show the toolbar. When the user is typing hide it” and pretty soon I would have a stuttering header trying to obey the commands it was receiving in an alternating fashion.

To I took a step back: if I start from the experience of typing, I want nothing else to get in the way. So, while I’m typing I don’t want a header to appear out of nowhere unless it had something important to say. If I reached my goal it’s fine.

If I move the mouse my intention is not typing (unless I brushed the trackpad with my fingers, which I sometimes do and it’s distracting but this is MVP interaction design. There’s still room for improvement here, but using it right now it seems MVP ready.

After this, I collected to large bags of trash from the land behind the house, with the dog.

4. Reinstated the Idle timer

We’ve bounced around ideas for constraints, and a clear one is the time you spend without writing, a la most dangerous writing app. We register the time passed since the last keystroke each second: 1, 2, 3 seconds without typing. No interface or visibility for this feature yet.

After this I had a quick lunch of chicken tacos.

5. Tweaked build process

Tedious and boring. Nothing else to add.

After finishing this, I went to Home Depot with my mother to buy supplies for some repairs on the house.

Many things which I do not remember

What a joy is it to not work through cases, I just see things that are broken and fix them. Unaccounted productivity is found in this. The same approach was taken for the repairs at home. My aunt and uncle from Canada will be staying over and I would like that my home reaches MVP state by then (hot showers and a working kitchen sink). That was the excuse but when I brought out the tools I just fixed whatever was broken.

It was a productive day on both material and digital realms.