HTML, CSS и JavaScript не являются избыточными, относительно друг, друга, что бы описать красный квадрат, меняющий цвет по клику, все равно пришлось бы описать сам квадрат, задать стили его оформления, и действие по клику, хоть тремя языками, хоть одним, количество строк кода будет примерно одинаковым, соответственно, имеет мечто попытка из трех языков сделать один, который в три раза сложнее каждого из них по-отдельности. Довольно сомнительная идея.
Имеет место неправильная постановка вопроса, нужно не открыть порты, а сделать проброс портов, с внешнего интерфейса роутера на какой то внутренний IP : порт, обычно, в интерфейсе роутера для этих целей имеется раздел NAT, где нужно создать правило, указав:
Прослушивающий интерфейс (внешний); Прослушивающий порт; Внутренний IP (куда пробрасывать); Внутренний порт;