Esposter

Users

The account surface: signing in at /login (Google, GitHub, or Facebook — see the auth architecture) and managing your identity at /user/settings — display name, biography, and profile image, the identity every product (posts, messages, achievements) renders.

How it works

  • Login — a provider-button card (Login/Button.vue per provider) driving better-auth's social sign-in; the guest middleware keeps signed-in users out.
  • Settings — an introduction card plus a sidebar-sectioned profile card (General is the only section today). Name and biography save through user.updateUser (biography length enforced by the users schema).
  • Profile image — the standard two-step SAS upload: user.generateProfileImageUploadUrl returns a one-hour write SAS for the fixed blob ${userId}/ProfileImage in the public user-assets container, the client PUTs the image, and the stable public URL is saved on the user.
  • Public profile — every user has a public page at /user/[id] showing their identity, achievement showcase, and posts. See public profile.
  • Message-scoped user state (presence/status, voice settings, per-room personas) is esbabbler's, not this page's — see profiles and presence and settings.

Procedures

ProcedureAuthInputPurpose
user.readUserpublic (rate-limited)user idpublic identity for a profile
user.updateUserauthedname/biography/imageupdate own profile
user.generateProfileImageUploadUrlauthedSAS URL for the profile image

Key files

Paths relative to packages/app/app.

FileRole
pages/login.vueprovider sign-in card
pages/user/settings.vuesettings layout
pages/user/[id].vuepublic profile page
components/User/ProfileCard/name/biography/image editing
components/User/Profile/public profile sections
components/Login/provider buttons

Open work: roadmap. Decided ideas: deferred, rejected.