Skip to content

Commit 1e2832d

Browse files
authored
Merge pull request #45 from universal-tool-calling-protocol/dev
Updated Hall of Fame
2 parents f32dbfc + a820b17 commit 1e2832d

File tree

3 files changed

+209
-3
lines changed

3 files changed

+209
-3
lines changed

src/data/contributors-manual.json

Lines changed: 59 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,18 @@
11
{
22
"generated_at": "2025-09-03T13:46:04.752Z",
3-
"total_contributors": 1,
3+
"total_contributors": 3,
44
"total_contributions": 24,
55
"total_impact_score": 24,
66
"total_recent_activity": 24,
77
"scoring_method": "manual_entry",
88
"contributors": [
99
{
10-
"id": 999999999,
10+
"id": 999999999,
1111
"login": "Robobc",
1212
"name": "Roberto Catalano",
1313
"avatar_url": "https://avatars.githubusercontent.com/u/999999999?v=4",
1414
"html_url": "https://github.com/Robobc",
15-
"bio": "Solutions Architect at AWS in Zurich",
15+
"bio": "Created some great example repositories and helped with the documentation.",
1616
"company": "Amazon Web Services",
1717
"location": "Zürich",
1818
"blog": null,
@@ -33,6 +33,62 @@
3333
"total_reviews": 0,
3434
"last_activity": "2025-09-03T13:46:04Z",
3535
"pr_success_rate": 0
36+
},
37+
{
38+
"id": 0,
39+
"login": "gwoodwa1",
40+
"name": "Gary Woodward",
41+
"avatar_url": "https://github.com/gwoodwa1.png",
42+
"html_url": "https://github.com/gwoodwa1",
43+
"bio": "Supported Go-port by giving gnmi support over grpc transport",
44+
"company": null,
45+
"location": null,
46+
"blog": null,
47+
"hireable": null,
48+
"public_repos": 0,
49+
"followers": 0,
50+
"following": 0,
51+
"created_at": null,
52+
"contributions": 0,
53+
"repositories": [
54+
"utcp-go"
55+
],
56+
"repo_count": 1,
57+
"impact_score": 0,
58+
"total_prs": 0,
59+
"total_merged_prs": 0,
60+
"total_recent_commits": 0,
61+
"total_reviews": 0,
62+
"last_activity": null,
63+
"pr_success_rate": 0
64+
},
65+
{
66+
"id": 0,
67+
"login": "armanzeroeight",
68+
"name": "Arman Nourifar",
69+
"avatar_url": "https://github.com/armanzeroeight.png",
70+
"html_url": "https://github.com/armanzeroeight",
71+
"bio": "For social media content and his excellent gifs",
72+
"company": null,
73+
"location": "Oslo, Norway",
74+
"blog": "https://medium.com/@arman08",
75+
"hireable": null,
76+
"public_repos": 0,
77+
"followers": 0,
78+
"following": 0,
79+
"created_at": null,
80+
"contributions": 0,
81+
"repositories": [
82+
"community"
83+
],
84+
"repo_count": 1,
85+
"impact_score": 0,
86+
"total_prs": 0,
87+
"total_merged_prs": 0,
88+
"total_recent_commits": 0,
89+
"total_reviews": 0,
90+
"last_activity": null,
91+
"pr_success_rate": 0
3692
}
3793
]
3894
}

src/pages/hall-of-fame.module.css

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -843,4 +843,88 @@
843843
.linesChangedLabel {
844844
font-size: 0.4rem;
845845
}
846+
}
847+
848+
/* Other Contributors (non-coder) section */
849+
.otherContributorsSection {
850+
padding: 3rem 1rem 0;
851+
max-width: 1200px;
852+
margin: 0 auto;
853+
}
854+
855+
.otherContributorsHeader {
856+
text-align: center;
857+
margin-bottom: 1.5rem;
858+
}
859+
860+
.otherContributorsTitle {
861+
font-size: 2rem;
862+
font-weight: 700;
863+
margin: 0 0 0.5rem 0;
864+
background: linear-gradient(135deg, #ffffff 0%, #8b5cf6 100%);
865+
background-clip: text;
866+
-webkit-background-clip: text;
867+
-webkit-text-fill-color: transparent;
868+
}
869+
870+
.otherContributorsSubtitle {
871+
font-size: 1rem;
872+
color: #888888;
873+
margin: 0;
874+
}
875+
876+
.otherContributorsGrid {
877+
display: grid;
878+
grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
879+
gap: 1rem;
880+
}
881+
882+
.otherContributorCard {
883+
background: linear-gradient(145deg, #111111 0%, #0a0a0a 100%);
884+
border: 1px solid #222222;
885+
border-radius: 12px;
886+
padding: 1rem;
887+
display: flex;
888+
flex-direction: column;
889+
align-items: center;
890+
gap: 0.5rem;
891+
}
892+
893+
.otherContributorIcon {
894+
width: 72px;
895+
height: 72px;
896+
border-radius: 50%;
897+
display: flex;
898+
align-items: center;
899+
justify-content: center;
900+
font-size: 2rem;
901+
background: linear-gradient(135deg, #1a1a1a 0%, #2a2a2a 100%);
902+
border: 1px solid #333333;
903+
}
904+
905+
.otherContributorImage {
906+
width: 100%;
907+
height: 100%;
908+
border-radius: 50%;
909+
object-fit: cover;
910+
}
911+
912+
.otherContributorRole {
913+
font-size: 1.05rem;
914+
font-weight: 600;
915+
margin: 0.25rem 0 0;
916+
color: #ffffff;
917+
}
918+
919+
.otherContributorThanks {
920+
font-size: 0.9rem;
921+
color: #cccccc;
922+
margin: 0;
923+
text-align: center;
924+
}
925+
926+
@media (max-width: 768px) {
927+
.otherContributorsSection {
928+
padding-top: 2rem;
929+
}
846930
}

src/pages/hall-of-fame.tsx

Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -472,6 +472,60 @@ const ContributorRow = ({ contributor, rank }: { contributor: DisplayContributor
472472

473473
export default function Contributors(): React.ReactNode {
474474
const contributors = useContributors();
475+
const [otherContributors, setOtherContributors] = useState<Array<{ avatar?: string; role: string; thanks: string; username: string }>>([]);
476+
477+
useEffect(() => {
478+
const loadOtherContributors = async () => {
479+
try {
480+
const manualModule = await import('../data/contributors-manual.json');
481+
const manualData = manualModule.default as { contributors?: Array<any> };
482+
const mapped = (manualData?.contributors || []).map((c: any) => {
483+
const username: string = c?.login || c?.name || 'friend';
484+
const name: string = c?.name || username;
485+
const bio: string | null = c?.bio || null;
486+
const avatar: string | undefined = c?.avatar_url || undefined;
487+
return {
488+
avatar,
489+
role: name,
490+
thanks: bio || 'Thank you for supporting UTCP.',
491+
username
492+
};
493+
});
494+
setOtherContributors(mapped);
495+
} catch (err) {
496+
// Fallback to a small static list when manual file is unavailable
497+
setOtherContributors([
498+
{ avatar: undefined, role: 'Maintainer', thanks: 'Guiding the project and ensuring high quality.', username: 'maintainer' },
499+
{ avatar: undefined, role: 'Designer', thanks: 'Improving UX and visual language.', username: 'designer' },
500+
{ avatar: undefined, role: 'Researcher', thanks: 'Exploring the landscape and informing decisions.', username: 'researcher' }
501+
]);
502+
}
503+
};
504+
loadOtherContributors();
505+
}, []);
506+
507+
const OtherContributorCard = ({ avatar, role, thanks, username }: { avatar?: string; role: string; thanks: string; username: string }) => {
508+
const [imageError, setImageError] = useState(false);
509+
const showImage = Boolean(avatar) && !imageError;
510+
return (
511+
<div className={styles.otherContributorCard}>
512+
<div className={styles.otherContributorIcon}>
513+
{showImage ? (
514+
<img
515+
src={avatar as string}
516+
alt={`${role} avatar`}
517+
className={styles.otherContributorImage}
518+
onError={() => setImageError(true)}
519+
/>
520+
) : (
521+
<span className={styles.avatarEmoji}>{generateFallbackAvatar(username)}</span>
522+
)}
523+
</div>
524+
<div className={styles.otherContributorRole}>{role}</div>
525+
<div className={styles.otherContributorThanks}>{thanks}</div>
526+
</div>
527+
);
528+
};
475529

476530
return (
477531
<Layout
@@ -502,6 +556,18 @@ export default function Contributors(): React.ReactNode {
502556
/>
503557
))}
504558
</div>
559+
560+
<div className={styles.otherContributorsSection}>
561+
<div className={styles.otherContributorsHeader}>
562+
<h2 className={styles.otherContributorsTitle}>Special Thanks</h2>
563+
<p className={styles.otherContributorsSubtitle}>Beyond code, here are some of our champions</p>
564+
</div>
565+
<div className={styles.otherContributorsGrid}>
566+
{otherContributors.map((oc, i) => (
567+
<OtherContributorCard key={i} avatar={oc.avatar} role={oc.role} thanks={oc.thanks} username={oc.username} />
568+
))}
569+
</div>
570+
</div>
505571

506572
{contributors.length > 1 && contributors[0]?.total_changes > 0 && (
507573
<div className={styles.statsFooter}>

0 commit comments

Comments
 (0)