base client-side skeleton