client-side structure