feat(preferences): frontend logic for user preferences

i see. i think we're complicating it. while it might make sense for authoring, here (and elsewhere) we can keep it simple