Profile and account (backlog)
Profile and account — backlog
Section titled “Profile and account — backlog”Follow-up work for user profile, authentication, and account settings beyond the v1 initials avatar, email/password auth, and development-time profile editing.
Cross-links: Identity and Access, Onboarding, Files and Uploads, Security and Privacy.
Avatar image upload
Section titled “Avatar image upload”Goal: Let users upload a profile photo; store a file reference on the user record and show it in the nav and profile header (replacing or supplementing computed initials).
v1 gap: v1 uses server-computed avatarInitials and avatarColor only — no users.avatar_path column or upload UI.
Dependencies:
- Presigned upload flow (Files and Uploads)
- Migration:
users.avatar_path(or equivalent file ID) - GraphQL: optional
avatarUrlonUser; mutation or upload-then-attach flow - UI: profile section for image pick/crop;
UserAvatarprefers image when present
Links: Files and Uploads, profile UI in ui/src/pages/profile/.
Email verification
Section titled “Email verification”Goal: Verify email on registration and when a user changes email via updateProfile; set email_verified_at and gate sensitive actions until verified.
v1 gap: v1 updates email immediately with uniqueness validation only — no verification mail, no blocking of unverified accounts for profile edits.
Dependencies:
- Laravel verification notifications / mail transport
- GraphQL or REST resend-verification endpoint
- UI: banner on profile when unverified; optional block on email-sensitive features
updateProfileemail change triggers re-verification flow
Links: Identity and Access — Authentication, Onboarding.
OAuth (Google / Apple)
Section titled “OAuth (Google / Apple)”Goal: Sign in and register with Google and Apple Sign In per product intent; link/unlink social accounts; support password-less OAuth-only accounts.
v1 gap: v1 is email + password only (Sanctum SPA cookies).
Dependencies:
- Laravel Socialite (or equivalent) + provider apps
- Account linking/unlinking rules (email collision, merge)
- Profile password section adapts when user has no password (OAuth-only)
- Mobile token flow alignment
Links: Identity and Access — Authentication, Architecture.
Two-factor authentication
Section titled “Two-factor authentication”Goal: Optional second factor for adult accounts (TOTP and/or WebAuthn — choice TBD); recovery codes; interaction with OAuth and password change.
v1 gap: No 2FA enrollment, challenge, or recovery.
Dependencies:
- Product choice: TOTP vs WebAuthn vs both
- Storage for secrets/credentials and recovery codes
- Login and session upgrade flows (web + mobile)
- Profile UI for enroll/disable/recovery
Links: Security and Privacy, Identity and Access.
Profile field edit policy
Section titled “Profile field edit policy”Goal: After development, restrict which profile fields users may self-edit; spiritual phase changes via reassessment/mentor flows, not free self-service.
v1 gap (development): config/profile.php editable_fields includes all onboarding fields (including spiritualPhase and dateOfBirth) so testers can iterate without re-onboarding. The profile page shows a dev notice (profile.devEditableNotice).
Production direction:
| Field | Dev (current) | Later |
|---|---|---|
name, email | Editable | Editable (email + verification when backlog ships) |
personalityFocus, learningStyle, studyMotivation | Editable | TBD — likely editable with limits |
spiritualPhase | Editable | Not freely editable; phase promotion via dedicated flow |
dateOfBirth | Editable | Likely read-only after onboarding |
Dependencies:
- Shrink
api/config/profile.phpeditable_fields - UI:
OnboardingProfileFieldsreadOnlyFieldsdriven from shared constants - Phase promotion UX per Study Methods and mentor flows
- Mentor/church override (
phase_source) when mentorship ships
Links: Identity and Access — Spiritual phase, Study Methods, api/config/profile.php.