> ## Documentation Index
> Fetch the complete documentation index at: https://memberpulseptyltd.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# UJ-M-002: Complete Member Profile

> New member completes their profile information after registration

## Journey Overview

| Attribute      | Value                                                           |
| -------------- | --------------------------------------------------------------- |
| **Journey ID** | UJ-M-002                                                        |
| **Actor**      | Newly registered member                                         |
| **Goal**       | Complete required profile fields to access full portal features |
| **Trigger**    | User completes registration or has incomplete profile           |
| **Outcome**    | Profile is complete and member can access all features          |

## Preconditions

* User has successfully registered/logged in
* Profile has missing required fields
* User has verified email address

## Journey Flow

```mermaid theme={null}
flowchart TD
    A[User logs in] --> B{Profile complete?}
    B -->|Yes| C[Go to Dashboard]
    B -->|No| D[Redirect to Profile Completion]
    D --> E[Fill personal details]
    E --> F[Fill contact details]
    F --> G[Fill professional details]
    G --> H[Upload profile photo]
    H --> I[Select interests]
    I --> J[Save profile]
    J --> K{All required fields?}
    K -->|No| L[Highlight missing fields]
    L --> E
    K -->|Yes| M[Profile marked complete]
    M --> C
```

## Detailed Steps

<Steps>
  <Step title="Profile Completion Redirect">
    After login, system checks profile completeness.

    **If incomplete:**

    * User redirected to profile completion wizard
    * Progress indicator shows completion percentage
    * User cannot access other features until minimum fields completed

    **Required fields vary by organization configuration**
  </Step>

  <Step title="Personal Information">
    User enters personal details:

    | Field         | Type   | Required     | Notes                                  |
    | ------------- | ------ | ------------ | -------------------------------------- |
    | First Name    | Text   | Yes          | Pre-filled from registration           |
    | Last Name     | Text   | Yes          | Pre-filled from registration           |
    | Date of Birth | Date   | Configurable | Age verification if needed             |
    | Gender        | Select | Configurable | Male, Female, Other, Prefer not to say |
    | Profile Photo | Image  | No           | Recommended, cropping tool provided    |
  </Step>

  <Step title="Contact Information">
    User enters contact details:

    | Field          | Type   | Required     | Notes                 |
    | -------------- | ------ | ------------ | --------------------- |
    | Email          | Email  | Yes          | Pre-filled, read-only |
    | Mobile Number  | Phone  | Configurable | International format  |
    | Contact Number | Phone  | No           | Alternative phone     |
    | Address        | Text   | Configurable | Street address        |
    | City           | Text   | Configurable |                       |
    | State/Province | Select | Configurable | Based on country      |
    | Postcode       | Text   | Configurable |                       |
    | Country        | Select | Configurable | Dropdown              |
  </Step>

  <Step title="Professional Information">
    User enters work details:

    | Field               | Type   | Required     | Notes                     |
    | ------------------- | ------ | ------------ | ------------------------- |
    | Company             | Text   | Configurable | Current employer          |
    | Position/Title      | Text   | Configurable | Job title                 |
    | Industry            | Select | Configurable | From configured list      |
    | Years of Experience | Number | No           |                           |
    | LinkedIn URL        | URL    | No           | Professional profile link |
    | Website URL         | URL    | No           | Personal/portfolio site   |
  </Step>

  <Step title="Interest Categories">
    User selects areas of interest:

    * Multiple selection allowed
    * Used for personalized content recommendations
    * Affects community feed, events, resources shown
    * Minimum selection may be required (e.g., at least 3)

    **Example Categories:**

    * Technology
    * Leadership
    * Finance
    * Marketing
    * Operations
    * HR & People
    * Legal & Compliance
  </Step>

  <Step title="Communication Preferences">
    User sets notification preferences:

    | Preference          | Options | Default |
    | ------------------- | ------- | ------- |
    | Email notifications | On/Off  | On      |
    | Event reminders     | On/Off  | On      |
    | Newsletter          | On/Off  | On      |
    | SMS notifications   | On/Off  | Off     |
    | Marketing emails    | On/Off  | Off     |
  </Step>

  <Step title="Save and Complete">
    User clicks "Complete Profile":

    * System validates all required fields
    * Profile saved to database
    * Profile marked as complete
    * User redirected to dashboard
    * Welcome email sent (if configured)
  </Step>
</Steps>

## Profile Photo Guidelines

<Tabs>
  <Tab title="Upload">
    * Supported formats: JPG, PNG, GIF
    * Maximum file size: 5MB
    * Recommended size: 400x400px minimum
    * Cropping tool provided for adjustment
  </Tab>

  <Tab title="Requirements">
    * Professional appearance recommended
    * Face clearly visible
    * Appropriate for business context
    * No offensive content (auto-moderation)
  </Tab>
</Tabs>

## Error Scenarios

| Scenario                 | System Response                       | User Action           |
| ------------------------ | ------------------------------------- | --------------------- |
| Required field missing   | Field highlighted in red with message | Fill in the field     |
| Invalid phone format     | "Please enter a valid phone number"   | Correct format        |
| Invalid URL format       | "Please enter a valid URL"            | Correct URL           |
| Photo too large          | "Image must be under 5MB"             | Resize/compress image |
| Unsupported photo format | "Please upload JPG, PNG, or GIF"      | Convert image         |
| Network error on save    | "Failed to save. Please try again."   | Retry save            |

## Skip Option (if enabled)

Some organizations allow members to skip profile completion:

* "Complete Later" button available
* Member can access basic features
* Reminder shown on each login
* Some features may be restricted until complete

## Related Entities

* [`User/Member`](/entities/core/user-member)
* [`Member Profile`](/entities/core/member-profile)
* [`Interest Category`](/entities/core/interest-category)

## Related Journeys

* [UJ-M-001](/member/journeys/register-login)
* [UJ-M-003](/member/journeys/choose-membership-plan)
* [UJ-M-030](/member/journeys/manage-notifications)

## Acceptance Criteria

### Frontend

* [ ] Multi-step form wizard with progress indicator
* [ ] Form validation on each step before proceeding
* [ ] Profile photo upload with preview and cropping
* [ ] Interest category multi-select with search
* [ ] Address autocomplete (Google Places or similar)
* [ ] Country/State dropdowns with dependency
* [ ] Mobile-responsive design
* [ ] Save progress between steps
* [ ] Success confirmation on completion

### Backend

* [ ] `GET /api/member/profile` - Get current profile
* [ ] `PUT /api/member/profile` - Update profile
* [ ] `POST /api/member/profile/photo` - Upload photo
* [ ] `GET /api/member/profile/required-fields` - Get required fields config
* [ ] `GET /api/interests` - Get interest categories

### Permissions

* [ ] Member can only edit their own profile
* [ ] Photo upload scanned for inappropriate content

### Business Rules

* [ ] Required fields configurable per organization
* [ ] Profile completeness calculated as percentage
* [ ] Interests affect content personalization
* [ ] Profile changes logged to audit trail

### Error Handling

* [ ] Field-level validation messages
* [ ] Network error retry with data preservation
* [ ] Photo processing error handling
