From 23c2207a2f66ad628879ff36a73a76757dcf96cd Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Feb 2026 19:21:24 +0000
Subject: [PATCH 1/5] Initial plan
From b22c3792e50e635624d9cc7e5b8de99d9700c395 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Feb 2026 19:25:17 +0000
Subject: [PATCH 2/5] Replace broken Vercel app with client-side GitHub API
solution
Co-authored-by: zonca <383090+zonca@users.noreply.github.com>
---
_includes/repository/repo_card.html | 90 +++++++++++++++++++++++++++++
_pages/repositories.md | 8 ++-
_plugins/github_repos.rb | 68 ++++++++++++++++++++++
_sass/_base.scss | 81 ++++++++++++++++++++++++++
4 files changed, 245 insertions(+), 2 deletions(-)
create mode 100644 _includes/repository/repo_card.html
create mode 100644 _plugins/github_repos.rb
diff --git a/_includes/repository/repo_card.html b/_includes/repository/repo_card.html
new file mode 100644
index 0000000000000..784b20b4cf62b
--- /dev/null
+++ b/_includes/repository/repo_card.html
@@ -0,0 +1,90 @@
+
+
{% for repo in site.data.repositories.github_repos %}
- {% include repository/repo.html repository=repo %}
+ {% assign repo_parts = repo | split: '/' %}
+ {% assign repo_owner = repo_parts[0] %}
+ {% assign repo_name = repo_parts[1] %}
+ {% include repository/repo_card.html repo=repo owner=repo_owner name=repo_name %}
{% endfor %}
{% endif %}
+
diff --git a/_plugins/github_repos.rb b/_plugins/github_repos.rb
new file mode 100644
index 0000000000000..c02cf334d9061
--- /dev/null
+++ b/_plugins/github_repos.rb
@@ -0,0 +1,68 @@
+require 'httparty'
+require 'jekyll'
+
+module GithubRepos
+ class GithubReposGenerator < Jekyll::Generator
+ safe true
+ priority :high
+
+ def generate(site)
+ if site.data['repositories'] && site.data['repositories']['github_repos']
+ site.data['repositories']['github_repos_data'] = []
+
+ site.data['repositories']['github_repos'].each do |repo|
+ owner, name = repo.split('/')
+
+ begin
+ # Fetch repository data from GitHub API
+ url = "https://api.github.com/repos/#{owner}/#{name}"
+ response = HTTParty.get(url, headers: {
+ 'User-Agent' => 'Jekyll-Site'
+ })
+
+ if response.code == 200
+ repo_data = response.parsed_response
+ site.data['repositories']['github_repos_data'] << {
+ 'name' => repo_data['name'],
+ 'full_name' => repo_data['full_name'],
+ 'description' => repo_data['description'],
+ 'html_url' => repo_data['html_url'],
+ 'stars' => repo_data['stargazers_count'],
+ 'forks' => repo_data['forks_count'],
+ 'language' => repo_data['language'],
+ 'owner' => repo_data['owner']['login']
+ }
+ puts "✓ Fetched data for #{repo}"
+ else
+ puts "✗ Failed to fetch #{repo}: HTTP #{response.code}"
+ # Add placeholder data if API fails
+ site.data['repositories']['github_repos_data'] << {
+ 'name' => name,
+ 'full_name' => repo,
+ 'description' => '',
+ 'html_url' => "https://github.com/#{repo}",
+ 'stars' => 0,
+ 'forks' => 0,
+ 'language' => '',
+ 'owner' => owner
+ }
+ end
+ rescue => e
+ puts "✗ Error fetching #{repo}: #{e.message}"
+ # Add placeholder data if fetch fails
+ site.data['repositories']['github_repos_data'] << {
+ 'name' => name,
+ 'full_name' => repo,
+ 'description' => '',
+ 'html_url' => "https://github.com/#{repo}",
+ 'stars' => 0,
+ 'forks' => 0,
+ 'language' => '',
+ 'owner' => owner
+ }
+ end
+ end
+ end
+ end
+ end
+end
diff --git a/_sass/_base.scss b/_sass/_base.scss
index a755d599c7bbc..56768f2d91a78 100644
--- a/_sass/_base.scss
+++ b/_sass/_base.scss
@@ -320,6 +320,87 @@ footer.sticky-bottom {
}
}
+// New repository cards
+.repositories-grid {
+ display: grid;
+ grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
+ gap: 1rem;
+ margin-top: 1rem;
+}
+
+.repo-card {
+ border: 1px solid var(--global-divider-color);
+ border-radius: 6px;
+ transition: transform 0.2s ease, box-shadow 0.2s ease;
+ background-color: var(--global-card-bg-color);
+
+ &:hover {
+ transform: translateY(-2px);
+ box-shadow: 0 4px 8px rgba(0, 0, 0, 0.1);
+ }
+}
+
+.repo-link {
+ text-decoration: none !important;
+ color: inherit;
+ display: block;
+
+ &:hover {
+ text-decoration: none !important;
+ }
+}
+
+.repo-header {
+ .repo-icon {
+ color: var(--global-text-color);
+ opacity: 0.6;
+ margin-top: 2px;
+ }
+}
+
+.repo-name {
+ font-size: 1.1rem;
+ font-weight: 600;
+ color: var(--global-theme-color);
+ margin: 0;
+}
+
+.repo-description {
+ font-size: 0.875rem;
+ color: var(--global-text-color);
+ opacity: 0.8;
+ margin: 0;
+ line-height: 1.4;
+}
+
+.repo-stats {
+ font-size: 0.75rem;
+ color: var(--global-text-color);
+ opacity: 0.7;
+
+ svg {
+ vertical-align: text-bottom;
+ }
+}
+
+.repo-language {
+ display: inline-flex;
+ align-items: center;
+
+ .language-color {
+ display: inline-block;
+ width: 12px;
+ height: 12px;
+ border-radius: 50%;
+ margin-right: 4px;
+ }
+}
+
+.repo-stars, .repo-forks {
+ display: inline-flex;
+ align-items: center;
+}
+
// Blog
.header-bar {
From acde5d4683e9e9ce94b58843a4b93527d4316111 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Feb 2026 19:27:02 +0000
Subject: [PATCH 3/5] Remove unused server-side plugin (using client-side fetch
instead)
Co-authored-by: zonca <383090+zonca@users.noreply.github.com>
---
_plugins/github_repos.rb | 68 ----------------------------------------
1 file changed, 68 deletions(-)
delete mode 100644 _plugins/github_repos.rb
diff --git a/_plugins/github_repos.rb b/_plugins/github_repos.rb
deleted file mode 100644
index c02cf334d9061..0000000000000
--- a/_plugins/github_repos.rb
+++ /dev/null
@@ -1,68 +0,0 @@
-require 'httparty'
-require 'jekyll'
-
-module GithubRepos
- class GithubReposGenerator < Jekyll::Generator
- safe true
- priority :high
-
- def generate(site)
- if site.data['repositories'] && site.data['repositories']['github_repos']
- site.data['repositories']['github_repos_data'] = []
-
- site.data['repositories']['github_repos'].each do |repo|
- owner, name = repo.split('/')
-
- begin
- # Fetch repository data from GitHub API
- url = "https://api.github.com/repos/#{owner}/#{name}"
- response = HTTParty.get(url, headers: {
- 'User-Agent' => 'Jekyll-Site'
- })
-
- if response.code == 200
- repo_data = response.parsed_response
- site.data['repositories']['github_repos_data'] << {
- 'name' => repo_data['name'],
- 'full_name' => repo_data['full_name'],
- 'description' => repo_data['description'],
- 'html_url' => repo_data['html_url'],
- 'stars' => repo_data['stargazers_count'],
- 'forks' => repo_data['forks_count'],
- 'language' => repo_data['language'],
- 'owner' => repo_data['owner']['login']
- }
- puts "✓ Fetched data for #{repo}"
- else
- puts "✗ Failed to fetch #{repo}: HTTP #{response.code}"
- # Add placeholder data if API fails
- site.data['repositories']['github_repos_data'] << {
- 'name' => name,
- 'full_name' => repo,
- 'description' => '',
- 'html_url' => "https://github.com/#{repo}",
- 'stars' => 0,
- 'forks' => 0,
- 'language' => '',
- 'owner' => owner
- }
- end
- rescue => e
- puts "✗ Error fetching #{repo}: #{e.message}"
- # Add placeholder data if fetch fails
- site.data['repositories']['github_repos_data'] << {
- 'name' => name,
- 'full_name' => repo,
- 'description' => '',
- 'html_url' => "https://github.com/#{repo}",
- 'stars' => 0,
- 'forks' => 0,
- 'language' => '',
- 'owner' => owner
- }
- end
- end
- end
- end
- end
-end
From 9e220e4cce68654d4d99bfabffb34741573c62d9 Mon Sep 17 00:00:00 2001
From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com>
Date: Wed, 18 Feb 2026 19:28:34 +0000
Subject: [PATCH 4/5] Address code review feedback: improve error handling and
memory efficiency
Co-authored-by: zonca <383090+zonca@users.noreply.github.com>
---
_includes/repository/repo_card.html | 49 ++++++++++++++++++-----------
1 file changed, 30 insertions(+), 19 deletions(-)
diff --git a/_includes/repository/repo_card.html b/_includes/repository/repo_card.html
index 784b20b4cf62b..53abbc8d04e34 100644
--- a/_includes/repository/repo_card.html
+++ b/_includes/repository/repo_card.html
@@ -34,11 +34,36 @@
{{ include.name }}