Skip to content

Story 2304: User Profile UI#2400

Open
jlchilders11 wants to merge 14 commits intodevelopfrom
jc/user-profile
Open

Story 2304: User Profile UI#2400
jlchilders11 wants to merge 14 commits intodevelopfrom
jc/user-profile

Conversation

@jlchilders11
Copy link
Copy Markdown
Collaborator

@jlchilders11 jlchilders11 commented May 5, 2026

Issue: #2304

Summary & Context

Changes

  • Implements v3 version of User Profile Page
  • Adds appropriate css file for this page
  • Adds _user_profile_bio_card component, which is a variation of a markdown card with space of library contributions
  • Adds _mailing_list_activity component, which lists mailing list activity on a card component.
  • Adds summary to _post_card for use with the empty state
  • Adds several new icons for the top buttons

‼️ Risks & Considerations ‼️

Please list any potential risks or areas that need extra attention during review/testing

Screenshots

Empty:

Desktop:

image

Dark Mode:
image

Mobile:
image

Filled:
Desktop:

image

Mobile:
image

Self-review Checklist

  • Tag at least one team member from each team to review this PR
  • Link this PR to the related GitHub Project ticket

Frontend

  • UI implementation matches Figma design
  • Tested in light and dark mode
  • Responsive / mobile verified
  • Accessibility checked (keyboard navigation, etc.)
  • Ensure design tokens are used for colors, spacing, typography, etc. – No hardcoded values
  • Test without JavaScript (if applicable)
  • No console errors or warnings

@jlchilders11 jlchilders11 requested review from julhoang and julioest May 5, 2026 20:31
@julhoang julhoang linked an issue May 6, 2026 that may be closed by this pull request
4 tasks
Copy link
Copy Markdown
Collaborator

@julioest julioest left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks great and works well in both states! One small thought: we could drop that duplicate markup (achievements, badges, posts, connections) and let CSS grid do the layout work for us instead.

I tried collapsing it into a single grid with grid-template-areas first, but every row took the height of the taller card across columns and left big gaps under the shorter ones. Two flex columns with display: contents on mobile cleared both problems up: each card renders once, the columns flow independently, and the mobile cascade is just order:.

<div class="user-profile__profile-content-area">
  <div class="user-profile__col">
    {# bio, github, mailing-list #}
  </div>
  <div class="user-profile__col">
    {# achievements, badges, posts, connections #}
  </div>
</div>
.user-profile__profile-content-area {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: var(--space-large);
  margin-bottom: var(--space-xl);
}

.user-profile__col {
  display: flex;
  flex-direction: column;
  gap: var(--space-large);
}

@media (max-width: 767px) {
  .user-profile__profile-content-area {
    grid-template-columns: 1fr;
  }
  /* Lift the column wrappers so the cards become direct grid children */
  .user-profile__col {
    display: contents;
  }
  .user-profile__bio          { order: 1; }
  .user-profile__achievements { order: 2; }
  .user-profile__badges       { order: 3; }
  .user-profile__github       { order: 4; }
  .user-profile__posts        { order: 5; }
  .user-profile__mailing-list { order: 6; }
  .user-profile__connections  { order: 7; }
}

Tried it locally and each card class shows up once, columns flow independently on desktop, and the mobile cascade orders bio → achievements → badges → github → posts → mailing-list → connections.

Here's a patch for this: pr-2400-dom-duplication-fix.patch

@jlchilders11
Copy link
Copy Markdown
Collaborator Author

  .user-profile__mailing-list { order: 6; }
  .user-profile__connections  { order: 7; }
}

This is slick as heck, implemented.

Copy link
Copy Markdown
Collaborator

@herzog0 herzog0 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking pretty good! Just a few fixes I think should be applied. Also, can you add some info to the description on how we can see other user's public profiles? I see me in the url, but I wouldn't know what to replace that with in order to see others' users pages.

Comment thread core/mock_data.py Outdated
Comment thread templates/includes/icon.html Outdated
Comment thread templates/includes/icon.html Outdated
Comment thread templates/v3/user_profile_page.html Outdated
{% include "v3/includes/_achievement_card.html" with achievements=achievements_data.achievements primary_button_url="https://www.example.com" %}
</div>
<div class="user-profile__badges">
{% include "v3/includes/_badges_card.html" with cta_url="#" cta_label="Explore available badges and how to earn them" empty_icon_srcs=badge_icon_srcs badges=demo_badges %}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we're passing empty_icon_srcs=badge_icon_srcs here but empty_icon_srcs is not defined in the badges card component, nor badge_icon_srcs is defined in the view context

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's what I get for trying to fix the card changes mid meeting! Thanks for the catch.

Comment thread static/css/v3/components.css Outdated
{% block content %}
<div class="user-profile__container">
<div class="user-profile__profile-card-row">
{% with user_info as user %}
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is there any different between with user_info as user and with user_info=user? I'm seeing two different patterns here, just wondering if it's purposeful.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Those are equivalent statements, this is just an older style of writing the same thing! I'm happy to change it if we decide we want the more modern style for consistency. Reference for this tag: https://docs.djangoproject.com/en/6.0/ref/templates/builtins/#with

Comment thread static/css/v3/buttons.css

.btn-secondary {
border-color: var(--color-stroke-strong);
background-color: var(--color-surface-weak);
Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sorry, is this actually needed? Cause we have audited the foundational buttons already and it feels unexpected to me to see any changes in them at this point

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it is necessary. Without this the non hero version of secondary buttons had no background color, so it picked up the grey behind it. I think this may have slipped through the cracks, since the background color on the demo page is the correct background color for the secondary buttons?

…e conflict, remove extra argument in user_profile_page.html
@jlchilders11 jlchilders11 requested a review from herzog0 May 8, 2026 17:51
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Webpage UI: User Profile

3 participants