implement html as TPL instead of hard-coded module