Well the 12-unit grid is normally chosen based on being divisible by [1,2,3,4,6,12]. 16-unit is divisible by [1,2,4,8,16], but I see that you added a "thirds" class to deal with that. 20-unit could be an option as it covers divisibility by [1,2,4,5,10,20] but also critically ignores 3 column. 24-unit (the product of the first four positive integers) is divisible by [1,2,3,4,5,6,8,12,24], so it would naturally allow the most flexibility at the cost of very granular 1/24 elements.
> Instead of taking the response as a second argument, the dispatch function is expected to return the response... The moment the function returns, both the status code and all headers are known.
I highly doubt this convention will work. You need to be able to return errors or DB information in the response code and headers, which would be impossible since Node is nonblocking. Even something as basic as storing session information in Redis suddenly becomes impossible. This seems like it gives a very minor benefit and causes a whole lot of problems.