typesafe plain typescript html templating