page: add client-side rendering