# Normalized Profile Links

**URL:** https://meta.discourse.org/t/normalized-profile-links/345494
**Category:** Theme component
**Created:** [January 3, 2025, 8:42pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494 "2025-01-03T20:42:29Z")
**Posts on this page:** 12
**Page:** 1

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [January 3, 2025, 8:42pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/1 "2025-01-03T20:42:29Z")

</div>

| | | |
| --- | --- | --- |
| ℹ | **Summary** | Add links to user card and profile |
| 🛠 | **Repository** | [GitHub - literatecomputing/normalized-profile-links: Add profile links and normalize the user part (e.g., make https://twitter.com/user or @user both be user) · GitHub](https://github.com/literatecomputing/normalized-profile-links) |
| ❓ | **Install Guide** | [How to install a theme or theme component](https://meta.discourse.org/t/how-do-i-install-a-theme-or-theme-component/63682) |
| 📖 | **New to Discourse Themes?** | [Beginner’s guide to using Discourse Themes](https://meta.discourse.org/t/beginners-guide-to-using-discourse-themes/91966) |

Install this theme component

Add `user_custom_field` links to user card and profile and attempt to deal with bad user entries. Allow adding links to arbitrary sites.

 ![image](https://global.discourse-cdn.com/meta/original/4X/6/9/1/69100337a0d5d9594effb33f82badc1a185bcf10.png)

 ![Profile settings page for normalization with selected profile data fields, icon, and processing options. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/0/b/f/0bf63e2b926ec8e3b1c7d8b147e44ffe38d408bd.png)

For example, a user might enter any of these for Twitter (X):

- `https://x.com/MyHandle`
- `https://twitter.com/MyHandle`
- `https://www.twitter.com/MyHandle`
- `x.com/MyHandle`
- `twitter.com/MyHandle`
- `/MyHandle`
- `@MyHandle`
- `MyHandle`

This theme component will make all of those become “MyHandle”, so if a user enters any of those in the twitter field, the link will become `https://x.com/MyHandle`. For a site like YouTube where an @ is needed in the URL for the profile link, you need to make the link URL be `https://youtube.com/@', so that the link will become `[https://youtube.com/@MyHandle`](https://youtube.com/@MyHandle%60). I considered making the `@` be part of the handle, but that makes breaks things if a user enters `@literatecomputing.com` as their BlueSky handle since BlueSky wants the profile URL to be `https://bsky.app/profile/literatecomputing.com` with **no** `@`.

Settings allow adding any site you wish that has some kind of handle that can be appended to some URL.

Note that the `custom_field_name` and link name are **case sensitive**. I considered trying to fix this but it was a pain and I decided that admins can deal with making the case match. (Thanks to @NateDhaliwal for trying the theme component and to @Moin and @Richie for pointing out that case sensitivity was an issue.)

If you require additional [Font Awesome Icons](https://fontawesome.com/v6/search?o=r&m=free) you can add them to the Additional Icons setting.

A bunch of the sample settings (and associated icons) are provided by AI completion and not tested. You can make changes to the settings yourself, but if you let me know about a broken one (via email or PR) I will be happy to fix it.

Another feature I have considered is making it possible to have entries appear on only the User Card or User Profile, rather than both. If that’s of interest, please let me know, especially if you have a budget.

### Why Yet _Another_ Custom Field Theme Component?

The Official [Custom Profile Link](https://meta.discourse.org/t/custom-profile-link/295470) adds a link for only one custom field. (🤷)

[Multiple Custom Profile Links](https://meta.discourse.org/t/multiple-custom-profile-links/295547) is similar to this, but this component adds

- a simpler customization interface,
- some error checking/fixing of users adding semi-bogus entries,
- and the ability to add links to custom services/sites.

Thanks to [Grey Arrows Drone Club](https://greyarro.ws/) for funding initial development!

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [January 4, 2025, 5:04am UTC](https://meta.discourse.org/t/normalized-profile-links/345494/2 "2025-01-04T05:04:55Z")

</div>

I’m not sure how to get the icons to show? I tried creating a custom user field, but I don’t think that’s how it’s done?

---

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [January 4, 2025, 8:32am UTC](https://meta.discourse.org/t/normalized-profile-links/345494/3 "2025-01-04T08:32:53Z")

</div>

@NateDhaliwal if it helps, here’s the custom user field settings we have for YouTube, also make sure the two `Show on...` settings are _not_ checked:

 ![Screenshot 2025-01-04 at 08.28.10](https://global.discourse-cdn.com/meta/original/4X/2/4/8/248f3adfc3fde11fe1f14bd0aee59fe2ee6f3d14.png)

Here are the settings used on this theme component for YouTube:

 ![Screenshot 2025-01-04 at 08.29.09](https://global.discourse-cdn.com/meta/original/4X/2/4/d/24d4510d7b3677aaaf4b5f93dd5d94b463f75083.png)

The end result when viewing a user profile:

 ![Screenshot 2025-01-04 at 08.29.54](https://global.discourse-cdn.com/meta/original/4X/5/2/e/52e82f0afafae2950d597a7053ca9d744aa30973.jpeg)

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [January 4, 2025, 9:57am UTC](https://meta.discourse.org/t/normalized-profile-links/345494/4 "2025-01-04T09:57:06Z")

</div>

I see, I had it checked.  
I did exactly what you did, but my Github icon isn’t showing.

 ![A form field for entering a Github username is displayed. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/3/4/8/348bdc8926d592d7702b091446a4a81cd6874700.png)  
 ![An interface for editing GitHub profile links, displaying fields for custom_field_name, icon, url, and title, with specific values provided. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/6/1/4/61468c20c248d95f2c123c72d41f69c688164a17.png)  
 ![This image appears to be a screenshot of a forum or message board, showing the profile details of the user called "Spam," who is redacted, along with various buttons and options related to the forum's administration and management. (Captioned by AI)](https://global.discourse-cdn.com/meta/original/4X/2/f/b/2fbcc3454f1a06c71db1bf286d4ba980286ad502.png)

---

<div class="post-metadata">

### Author: ![Moin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/moin/32/554653_2.png) [@Moin](https://meta.discourse.org/u/Moin)
#### Post date: [January 4, 2025, 10:07am UTC](https://meta.discourse.org/t/normalized-profile-links/345494/5 "2025-01-04T10:07:59Z")

</div>

In the component settings, your input for the field name is “Git **H** ub”, but above the name of the field is “Git **h** ub”. Maybe it will work if they are the same.

---

<div class="post-metadata">

### Author: ![NateDhaliwal](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/natedhaliwal/32/313494_2.png) [@NateDhaliwal](https://meta.discourse.org/u/NateDhaliwal)
#### Post date: [January 4, 2025, 10:12am UTC](https://meta.discourse.org/t/normalized-profile-links/345494/6 "2025-01-04T10:12:22Z")

</div>

It now works. Thanks a bunch!

---

<div class="post-metadata">

### Author: ![patrickemin](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/patrickemin/32/520162_2.png) [@patrickemin](https://meta.discourse.org/u/patrickemin)
#### Post date: [May 16, 2026, 5:25pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/7 "2026-05-16T17:25:13Z")

</div>

Hi, I have this warning in my console regarding this component, is there an update available ?

Thanks.

 ![image](https://global.discourse-cdn.com/meta/original/4X/5/7/a/57a3f34527a1f99225e0a6d0e5bdc322b9f74746.png)

---

<div class="post-metadata">

### Author: ![Lilly](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lilly/32/575047_2.png) [@Lilly](https://meta.discourse.org/u/Lilly)
#### Post date: [May 18, 2026, 5:57pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/8 "2026-05-18T17:57:43Z")

</div>

i have a PR with fixes for the array deprecations

[https://github.com/literatecomputing/normalized-profile-links/pull/1](https://github.com/literatecomputing/normalized-profile-links/pull/1)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [May 18, 2026, 6:09pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/9 "2026-05-18T18:09:05Z")

</div>

Thanks, Lilly! I just merged it!

---

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [May 18, 2026, 6:39pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/10 "2026-05-18T18:39:17Z")

</div>

> [@Lilly](#):
>
> i have a PR with fixes for the array deprecations

Amazing, thank you 🙇

> [@pfaffman](#):
>
> I just merged it!

And I’ve just updated on my Discourse - all good 🥳

---

<div class="post-metadata">

### Author: ![Richie](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/richie/32/115110_2.png) [@Richie](https://meta.discourse.org/u/Richie)
#### Post date: [May 18, 2026, 6:41pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/11 "2026-05-18T18:41:10Z")

</div>

And one day we’ll get it to `v0.0.2` 😁

 ![Screenshot 2026-05-18 at 19.40.12](https://global.discourse-cdn.com/meta/original/4X/4/7/6/476f4845ac37bf1de6e2bcd9d30fab9a1b8b792d.png)

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [May 18, 2026, 7:03pm UTC](https://meta.discourse.org/t/normalized-profile-links/345494/12 "2026-05-18T19:03:16Z")

</div>

> [@Richie](#):
>
> And one day we’ll get it to `v0.0.2` 😁

It’s something to look forward to!
