Page: Settings

Code: SETT Route: /settings Access: Authenticated Priority: P0 Status: In Scope

Purpose

Central location for account management, notification preferences, payment settings, availability management, and security options.


Connections

Incoming (users arrive from)

Source Trigger Notes
Nav "Settings" link Global navigation or user menu
PROF "Settings" link From profile page
SDSH/TDSH/CDSH "Settings" in menu From dashboards

Outgoing (users navigate to)

Target Trigger Notes
PROF "View Profile" link Back to profile
(Stripe) "Manage Payment" External: Stripe portal
LGIN After logout Redirect to login
PWRS "Change Password" → reset flow Password change

Data Requirements

Entity Fields Used Purpose
users email, name, handle, timezone Account settings
(notification_preferences) various flags Notification settings
availability day_of_week, start_time, end_time, timezone ST availability
(stripe_customer) customer_id, payment_method Payment info

Sections

Settings Navigation

  • Sidebar or tab navigation:

Account Settings

  • **Email:** Display current, "Change" button
  • **Name:** Editable field
  • **Handle:** Display @handle, "Change" (with availability check)
  • **Timezone:** Dropdown selector
  • **Language:** (Future) Dropdown

Notification Preferences

  • **Email Notifications:**
  • **Push Notifications:** (if mobile app)
  • **Notification Frequency:**

Availability Settings (STs/Creators Only)

  • Weekly calendar grid
  • Set available time slots:
  • Timezone reminder/display
  • "Copy to all days" helper
  • Buffer time between sessions (optional)

Payment Settings (STs/Creators Only)

  • **Payout Method:**
  • **Payout Threshold:**
  • **Payout History:**

Privacy Settings

  • **Profile Visibility:** Public/Private toggle
  • **Show Online Status:** Toggle
  • **Allow Messages From:** Everyone / Enrolled only / Following only
  • **Data Export:** "Download My Data" button

Security Settings

  • **Password:**
  • **Two-Factor Authentication:** (Future)
  • **Active Sessions:**
  • **Delete Account:**

Logout

  • "Log Out" button
  • Confirms and redirects to HOME/LGIN

User Stories Fulfilled

  • US-P010: Manage account settings
  • US-P018: Control notification preferences
  • US-C006: Creator sets availability
  • US-T001: ST sets availability
  • US-P022: Set timezone preference

States & Variations

State Description
Student Hides Availability, Payment sections
ST Shows Availability, Payment sections
Creator Shows Availability, Payment sections
Multi-Role All sections visible
Stripe Connected Shows account status, update option
Stripe Not Connected Prominent "Connect Stripe" CTA

Mobile Considerations

  • Settings nav becomes horizontal tabs or accordion
  • Each section is a separate screen
  • Large touch targets for toggles
  • Confirmation dialogs for destructive actions

Error Handling

Error Display
Save fails "Unable to save settings. Please try again."
Email change fails "Unable to update email. Try again."
Stripe connection fails "Unable to connect payment. Try again."
Account deletion fails "Unable to delete. Contact support."

Analytics Events

Event Trigger Data
`page_view` Page load section
`setting_changed` Any setting saved setting_name, new_value
`availability_updated` Availability changed slots_count
`stripe_connected` Stripe connected -
`logout` Logout clicked -
`account_deleted` Account deleted -


Notes

  • Security-sensitive changes should require password confirmation
  • Email change triggers verification email via Resend
  • Consider in-app notification preview
  • Stripe Connect: Express accounts for STs/Creators (per CD-020)
  • Availability stored in user's timezone, converted for display to students
  • Webhook `account.updated` is the source of truth for Stripe status