Skip to main content

Profile & Preferences Reference

Profile editing

  • frontend/src/pages/applications/Users/settings/ProfileCoverEdit.js:95 hydrates profile data with GET /u/profileinfo/{userid}.
  • Location, signature and bio updates hit POST /u/updusrloc, /u/updusrsig and /u/updusrbio respectively (see lines 158�200 of the same file).
  • Avatar and cover uploads reuse the shared upload helper to push media to the static service before patching profile metadata.

Preferences

  • 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.

Requests & invites

  • 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.

Backend routes

  • 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.

UX considerations

  • 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.