backend: more generic js + api calls, page list