move web funcs into own submodule