Profile Avatar Modernization

Posted by Schema on behalf of the Learner Engagement Product Subgroup. Original concept by Raccoon Gang.

Overview

The current Open edX profile and avatar system is limited to basic image upload or a static default placeholder. This feature idea proposes a set of incremental, platform-wide improvements to how user identity is represented, including initials-based fallback avatars, randomized background colors drawn from the platform’s design palette, and curated default avatar sets, so that every user has a meaningful visual identity out of the box.


Problem

When a learner or instructor has not uploaded a profile photo, Open edX displays a generic static placeholder that provides no sense of identity or personalization. This is increasingly out of step with modern platform expectations (Google, Slack, GitHub, Canvas all render initials or assigned avatars as defaults), and it makes community spaces like forums and course dashboards feel impersonal. There is currently no configurable fallback that instances can tune to match their branding or community style.


Use Cases

  • As a learner who hasn’t uploaded a profile photo, I need an automatically generated avatar with my initials so that I feel represented in course discussions and my profile looks complete from day one.

  • As a learner, I need to be able to choose between my initials, a color background, a curated default avatar, or my own uploaded photo so that I can express my identity in a way that feels right for me.

  • As an instructor, I need a consistent and recognizable visual identity across forums, dashboards, and course cards so that learners can easily identify my presence in the platform.

  • As a platform administrator, I need to be able to configure a set of default avatar collections for my instance so that unset profiles still feel on-brand and welcoming for my community.


Proposed Solution

Implement a phased set of improvements to the profile avatar system, focused initially (Phase 1) on core platform defaults that apply to all instances out of the box:

Phase 1:

  1. Initials Fallback: When no profile photo is set, generate an avatar displaying the user’s initials with a randomly assigned background color drawn from the platform’s established design palette.

  2. Random Background Color Assignment: A curated set of accessible, on-brand colors is configured at the platform level and randomly assigned to initials avatars on account creation.

Future phases:

  1. Default Avatar Sets: Allow platform instances to upload and configure collections of default avatars (e.g., illustrated characters or icons, similar to Google Drive’s anonymous animal avatars). In multi-tenant contexts, individual sites can override the instance defaults.

  2. User Choice: Provide users with the ability to select among their initials (with assigned color), a default avatar from the curated set, or their own uploaded photo.

Note on scope: This feature idea covers a Phase 1 (core platform improvements). More advanced capabilities, such as themed/emoji-style pickers, external avatar service integrations (Dicebear, Gravatar, UI Avatars), and optional gamified avatar progression (unlockable sets, avatar leveling), are out of scope for this idea.


Supporting Data

Competitive landscape (from draft proposal):

Feature Platforms that support it
Initials fallback Google, Slack, Canvas, Figma
Random avatar assignment Zoom, Microsoft Teams, Github (Identicons),
Themed pickers / default sets WhatsApp, Discord, Bitmoji, Claude

Update about the first iteration of a bigger push to modernize avatars in Open edX.

Starting point: showing user initials instead of the grey silhouette when someone hasn’t uploaded a photo.

While implementing it I ran into the real problem: there’s no single place where avatars are resolved. Each surface gets them a different way. The profile page calls the accounts API. Discussions gets image URLs batched with the thread data. The MFE headers don’t use either. They read authenticatedUser.avatar, a field that never gets populated, so they always render a grey icon bundled in the JS. That’s also why uploaded photos never show up in the LMS header today.

On top of that, the grey default costs literally nothing. No API call, no server work. So any personalized avatar has to add cost or complexity somewhere, and where you add it changes depending on which surface you’re fixing.

I wrote all of this up with the details in the platform PR: feat: generate initials avatar as default profile image by SantiagoSuHe · Pull Request #38638 · openedx/openedx-platform · GitHub I met with Adolfo Brandes to walk through the problem. He’ll analyze it and decide which approach is the right one over the next two to three months, so I’m keeping the PRs as drafts until then.The PRs, all drafts:

This looks great! Love the idea. Curious if anyone from the design WG has reviewed - any UX considerations or edge cases we’re not thinking about?

Feedback from Product WG: Steve Tiszenkel mentioned that this is a low engineering lift to implement, but made a point to note that we must ensure that the color persists for the user across the platform.