You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
User will see various pre-existing options and options using the first letter of their first name. Not set or if SMS log in, we will not show these options.
Video Mock
CleanShot.2025-10-01.at.14.52.34.mp4
Detailed Design Constraints [OUTDATED - Pending update as of Oct 2 11am BST]
Due to the nature of this feature (NON-CRITICAL), we will limit scope and complexity. The design is actively being discussed.
Create: /src/pages/settings/Profile/Avatar/AvatarPage.tsx - page for updating the profile picture
- Build the UI with a preview, an avatar grid, and a color selector.
- Manage user's selection in local state.
- On "Save", call the generator and the upload action. Navigation:
- Add AvatarPage to the settings navigator.
- Add a link from ProfilePage.tsx to this new page.
Create: /src/pages/settings/Profile/Avatar/AvatarGenerator.tsx - dedicated component to render the selected avatar for capturing
- Render the selected SVG: use existingAvatar component/react-native-svg- Pass the user's selected color as a fill prop to the SVG component.
- Capture the view: use exisiting react-native-view-shot - Wrap in <ViewShot> component and capture View as a 400x400 png.
- Generate the image: Expose a capture function via ref that returns the image file URI.
- Upload the image: Use the existing UpdateUserAvatar action. Convert the image URI from the generator into a file object, similar to how it's done in ProfilePage.js for photo library uploads.
Assets:
Create src/components/Icon/CustomAvatars.ts.
- All existing user avatars are in src/components/Icon/DefaultAvatars.ts.
- Import all new icon options to use in this file
Mini Feature: Custom Expensify Avatars [OCT 20 DEADLINE]
Background
[Slack convo]
Mini-feature request: Build an avatar customization page.
Figma
User has not set avatar (using a default):

Using has a custom avatar:

User will see various pre-existing options and options using the first letter of their first name. Not set or if SMS log in, we will not show these options.

Video Mock
CleanShot.2025-10-01.at.14.52.34.mp4
Detailed Design Constraints [OUTDATED - Pending update as of Oct 2 11am BST]
Due to the nature of this feature (NON-CRITICAL), we will limit scope and complexity. The design is actively being discussed.
Page Details
Route:
<*>new.expensify.com:8082/settings/profile/avatarComponents
/src/pages/settings/Profile/ProfileAvatar.tsx/src/pages/settings/Profile/Avatar/ProfileAvatar.tsxCreate:
/src/pages/settings/Profile/Avatar/AvatarPage.tsx- page for updating the profile picture- Build the UI with a preview, an avatar grid, and a color selector.
- Manage user's selection in local state.
- On "Save", call the generator and the upload action.
Navigation:
- Add
AvatarPageto the settings navigator.- Add a link from
ProfilePage.tsxto this new page.Create:
/src/pages/settings/Profile/Avatar/AvatarGenerator.tsx- dedicated component to render the selected avatar for capturing- Render the selected SVG: use existing
Avatarcomponent/react-native-svg- Pass the user's selected color as a fill prop to the SVG component.- Capture the view: use exisiting
react-native-view-shot- Wrap in<ViewShot>component and capture View as a 400x400 png.- Generate the image: Expose a capture function via ref that returns the image file URI.
- Upload the image: Use the existing
UpdateUserAvataraction. Convert the image URI from the generator into a file object, similar to how it's done inProfilePage.jsfor photo library uploads.Assets:
Create
src/components/Icon/CustomAvatars.ts.- All existing user avatars are in
src/components/Icon/DefaultAvatars.ts.- Import all new icon options to use in this file
For the custom initial avatar:
How we grab A-Z for workspace
https://github.com/Expensify/App/blob/4f2680eeda2a101bad5362c96e557ca814114de0/src/components/Icon/WorkspaceDefaultAvatars.ts
How we fetch workspace SVG
App/src/libs/ReportUtils.ts
Lines 2787 to 2805 in 4f2680e
We can create color map similar to
App/src/styles/utils/index.ts
Lines 54 to 73 in fa5e06d
See how we color workspace SVGs here
Issue Owner
Current Issue Owner: @RachCHopkins