Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(gnoweb): user template #4024

Draft
wants to merge 10 commits into
base: master
Choose a base branch
from

Conversation

alexiscolin
Copy link
Member

@alexiscolin alexiscolin commented Mar 28, 2025

⚠️ WIP: New User/Team Profile Page Template

Description

This PR introduces a new template for user and team profile pages, accessible via the new u/ handle. This is a significant step in improving the user experience on gno.land by providing dedicated profile pages similar to GitHub's user profiles.

- Design is still WIP - some features and info will be removed or added

Features

Profile Header

  • User/team avatar
  • Display name and username
  • Quick access to contributions section
  • Appart from username and contributions, other sections are optionals

Main Content Area

  • Realm content rendering (similar to GitHub's README)
  • Contributions section with:
    • Filterable list of packages (All/Realms/Pures)
    • Contributions
    • Package size information
    • More to come

Sidebar

  • User/team bio
  • Social links with icons (GitHub, Twitter, Discord, etc.)
  • Team memberships (or Users for team page)
  • Quick navigation links

Technical Details

URL Structure

  • New u/ handle for user profiles
  • Example: gno.land/u/username

Template Structure

  • Added a filter CSS component
  • Mobile-friendly design
  • Contribution sorting (WIP)

Screenshots

Capture d’écran 2025-03-29 à 18 39 17

@alexiscolin alexiscolin marked this pull request as draft March 28, 2025 07:35
@alexiscolin alexiscolin self-assigned this Mar 28, 2025
@github-actions github-actions bot added the 📦 ⛰️ gno.land Issues or PRs gno.land package related label Mar 28, 2025
@alexiscolin alexiscolin added the 🌍 gnoweb Issues & PRs related to gnoweb and render label Mar 28, 2025
@Gno2D2 Gno2D2 requested a review from gfanton March 28, 2025 07:36
@Gno2D2
Copy link
Collaborator

Gno2D2 commented Mar 28, 2025

🛠 PR Checks Summary

🔴 Changes related to gnoweb must be reviewed by its codeowners

Manual Checks (for Reviewers):
  • IGNORE the bot requirements for this PR (force green CI check)
Read More

🤖 This bot helps streamline PR reviews by verifying automated checks and providing guidance for contributors and reviewers.

✅ Automated Checks (for Contributors):

🟢 Maintainers must be able to edit this pull request (more info)
🔴 Changes related to gnoweb must be reviewed by its codeowners
🟢 Pending initial approval by a review team member, or review from tech-staff

☑️ Contributor Actions:
  1. Fix any issues flagged by automated checks.
  2. Follow the Contributor Checklist to ensure your PR is ready for review.
    • Add new tests, or document why they are unnecessary.
    • Provide clear examples/screenshots, if necessary.
    • Update documentation, if required.
    • Ensure no breaking changes, or include BREAKING CHANGE notes.
    • Link related issues/PRs, where applicable.
☑️ Reviewer Actions:
  1. Complete manual checks for the PR, including the guidelines and additional checks if applicable.
📚 Resources:
Debug
Automated Checks
Maintainers must be able to edit this pull request (more info)

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 The pull request was created from a fork (head branch repo: alexiscolin/gno)

Then

🟢 Requirement satisfied
└── 🟢 Maintainer can modify this pull request

Changes related to gnoweb must be reviewed by its codeowners

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 A changed file matches this pattern: ^gno.land/pkg/gnoweb/ (filename: gno.land/pkg/gnoweb/components/layout_index.go)

Then

🔴 Requirement not satisfied
└── 🔴 Or
    ├── 🔴 This user reviewed pull request: alexiscolin
    └── 🔴 This user reviewed pull request: gfanton

Pending initial approval by a review team member, or review from tech-staff

If

🟢 Condition met
└── 🟢 And
    ├── 🟢 The base branch matches this pattern: ^master$
    └── 🟢 Not (🔴 Pull request author is a member of the team: tech-staff)

Then

🟢 Requirement satisfied
└── 🟢 If
    ├── 🟢 Condition
    │   └── 🟢 Or
    │       ├── 🔴 At least 1 user(s) of the organization reviewed the pull request (with state "APPROVED")
    │       ├── 🔴 At least 1 user(s) of the team tech-staff reviewed pull request
    │       └── 🟢 This pull request is a draft
    └── 🟢 Then
        └── 🟢 Not (🔴 This label is applied to pull request: review/triage-pending)

Manual Checks
**IGNORE** the bot requirements for this PR (force green CI check)

If

🟢 Condition met
└── 🟢 On every pull request

Can be checked by

  • Any user with comment edit permission

Copy link

codecov bot commented Mar 28, 2025

Codecov Report

Attention: Patch coverage is 2.70270% with 144 lines in your changes missing coverage. Please review.

Files with missing lines Patch % Lines
gno.land/pkg/gnoweb/handler.go 1.04% 94 Missing and 1 partial ⚠️
gno.land/pkg/gnoweb/components/view_user.go 0.00% 47 Missing ⚠️
gno.land/pkg/gnoweb/components/layout_index.go 0.00% 2 Missing ⚠️

📢 Thoughts on this report? Let us know!

@leohhhn leohhhn self-requested a review March 28, 2025 11:32
@alexiscolin
Copy link
Member Author

@gfanton I think we can start with this layout.

Comment on lines +276 to +277
Type: components.UserLinkTypeLinkedin,
URL: "https://linkedin.com/" + username,
Copy link
Member

Choose a reason for hiding this comment

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

Should we link to LinkedIn? I need feedback from the marketing team on the reasons why.

Copy link
Member Author

Choose a reason for hiding this comment

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

Actually, it's really open to discussion right now. I added a list of "most famous" links as example, in order to let people discuss the need.

Copy link
Member Author

@alexiscolin alexiscolin Apr 1, 2025

Choose a reason for hiding this comment

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

We can get rid of it (and other) or/and add other ones I may have forgotten (if it makes sense)

Comment on lines +280 to +281
Type: components.UserLinkTypeLink,
URL: "https://example.com/" + username,
Copy link
Member

Choose a reason for hiding this comment

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

don't forget to remove this.

Copy link
Member Author

Choose a reason for hiding this comment

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

Sure, this is a bad mockup before the data will be retrieve from the right place

contributions := []components.UserContribution{
{
Title: "gno-blogpost",
Description: "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
Copy link
Member

Choose a reason for hiding this comment

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

I think most packages won't have a description. We may need some of them to specify a description, possibly with comments. However, consider that this will be very irregular. I suggest you plan for the following now:

  • No description
  • Single-line description
  • Multi-line description to be stripped

@@ -183,6 +187,103 @@ func (h *WebHandler) GetRealmView(gnourl *weburl.GnoURL) (int, *components.View)
})
}

// GetUserView returns the user profile view for a given GnoURL.
func (h *WebHandler) GetUserView(gnourl *weburl.GnoURL) (int, *components.View) {
username := strings.TrimPrefix(gnourl.Path, "/u/")
Copy link
Member

Choose a reason for hiding this comment

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

It works now, but I believe we will have subpages for users, pagination, etc. I'm not sure if everything will rely on queries, but it's fine to use the current routing mechanism for now.

}

// FormatRelativeTime formats a time into a relative string (e.g. "1 month ago")
func FormatRelativeTime(t time.Time) string {
Copy link
Member

Choose a reason for hiding this comment

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

move these helpers into template.go

Copy link
Member

@moul moul left a comment

Choose a reason for hiding this comment

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

I like the direction it takes. We'll rely on missing features such as the "package listing" and possibly some additional package metadata through comment extraction. I suggest we maintain this direction while considering a more minimal initial version that we can merge early and then expand.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
🌍 gnoweb Issues & PRs related to gnoweb and render 📦 ⛰️ gno.land Issues or PRs gno.land package related
Projects
Status: No status
Status: Triage
Development

Successfully merging this pull request may close these issues.

4 participants