client-side layout