Theme selection sends POST /u/theme/{theme} (frontend/src/pages/applications/Users/settings/Options/Theme.js:45), persisting the choice server-side so future sessions pick it up automatically.
Helper text toggles call POST /u/bht/upd at frontend/src/pages/applications/Users/settings/Options/ButtonHelper.js:66.
Testimony permissions use POST /u/testim/upd (frontend/src/pages/applications/Users/settings/Options/TestimonySetting.js:65), which controls whether others can submit testimonials.
The ReqInvUser module aggregates membership requests and invitations for the current user by querying /u/reqinv endpoints (see component for exact call sites). Actions cascade to the same /c/prbd/... routes described in the membership docs.
Notification tabs consume /n/notiuser, /n/notiboard, /n/notipres routes so members can mark items read without visiting each club.
All profile preference endpoints reside in backend/r/users.js around lines 150�220, guarded by isAuthorized.isLoggedIn and debounced to prevent rapid updates.
Each controller sanitises HTML inputs and trims length to respect database caps before saving.
The master/detail pattern keeps the mobile experience responsive; swipe gestures (useSwipeBack and useSwipeToNavigate) manage navigation on touch devices.
Dirty-state checks disable save buttons until something actually changes, reducing unnecessary API chatter.