From 0a643892a9e22e800d19f2e4c1b06c37c4822e44 Mon Sep 17 00:00:00 2001 From: Vishnu Date: Tue, 28 Apr 2026 18:44:06 +0530 Subject: [PATCH 1/5] Add dark mode toggle feature - Add DarkModeToggle component with sun/moon icons - Update all components to support light/dark themes - Add CSS custom properties for theme switching - Implement persistent theme preference storage - Add smooth transitions between themes --- .astro/data-store.json | 2 +- .astro/settings.json | 2 +- .astro/types.d.ts | 1 - src/components/App.astro | 6 +- src/components/DarkModeToggle.astro | 126 ++++++++++++++++++++++++++++ src/components/IssueList.astro | 75 ++++++++++------- src/components/Navbar.astro | 48 +++++++++-- src/components/ProjectCard.astro | 27 +++++- src/components/ProjectList.astro | 39 +++++++-- src/components/SocialShare.astro | 17 +++- src/layouts/Layout.astro | 32 ++++++- 11 files changed, 320 insertions(+), 55 deletions(-) create mode 100644 src/components/DarkModeToggle.astro diff --git a/.astro/data-store.json b/.astro/data-store.json index a929187e..0caf6209 100644 --- a/.astro/data-store.json +++ b/.astro/data-store.json @@ -1 +1 @@ -[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.3.0","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[]},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":\"shiki\",\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"responsiveImages\":false,\"serializeConfig\":false},\"legacy\":{\"collections\":false}}"] \ No newline at end of file +[["Map",1,2],"meta::meta",["Map",3,4,5,6],"astro-version","5.18.1","astro-config-digest","{\"root\":{},\"srcDir\":{},\"publicDir\":{},\"outDir\":{},\"cacheDir\":{},\"compressHTML\":true,\"base\":\"/\",\"trailingSlash\":\"ignore\",\"output\":\"static\",\"scopedStyleStrategy\":\"attribute\",\"build\":{\"format\":\"directory\",\"client\":{},\"server\":{},\"assets\":\"_astro\",\"serverEntry\":\"entry.mjs\",\"redirects\":true,\"inlineStylesheets\":\"auto\",\"concurrency\":1},\"server\":{\"open\":false,\"host\":false,\"port\":4321,\"streaming\":true,\"allowedHosts\":[]},\"redirects\":{},\"image\":{\"endpoint\":{\"route\":\"/_image\"},\"service\":{\"entrypoint\":\"astro/assets/services/sharp\",\"config\":{}},\"domains\":[],\"remotePatterns\":[],\"responsiveStyles\":false},\"devToolbar\":{\"enabled\":true},\"markdown\":{\"syntaxHighlight\":{\"type\":\"shiki\",\"excludeLangs\":[\"math\"]},\"shikiConfig\":{\"langs\":[],\"langAlias\":{},\"theme\":\"github-dark\",\"themes\":{},\"wrap\":false,\"transformers\":[]},\"remarkPlugins\":[],\"rehypePlugins\":[],\"remarkRehype\":{},\"gfm\":true,\"smartypants\":true},\"security\":{\"checkOrigin\":true,\"allowedDomains\":[],\"actionBodySizeLimit\":1048576},\"env\":{\"schema\":{},\"validateSecrets\":false},\"experimental\":{\"clientPrerender\":false,\"contentIntellisense\":false,\"headingIdCompat\":false,\"preserveScriptOrder\":false,\"liveContentCollections\":false,\"csp\":false,\"staticImportMetaEnv\":false,\"chromeDevtoolsWorkspace\":false,\"failOnPrerenderConflict\":false,\"svgo\":false},\"legacy\":{\"collections\":false}}"] \ No newline at end of file diff --git a/.astro/settings.json b/.astro/settings.json index 09eaa37f..30734094 100644 --- a/.astro/settings.json +++ b/.astro/settings.json @@ -1,5 +1,5 @@ { "_variables": { - "lastUpdateCheck": 1759260475499 + "lastUpdateCheck": 1777380175180 } } \ No newline at end of file diff --git a/.astro/types.d.ts b/.astro/types.d.ts index 03d7cc43..f964fe0c 100644 --- a/.astro/types.d.ts +++ b/.astro/types.d.ts @@ -1,2 +1 @@ /// -/// \ No newline at end of file diff --git a/src/components/App.astro b/src/components/App.astro index d2b4739a..48110f29 100644 --- a/src/components/App.astro +++ b/src/components/App.astro @@ -23,17 +23,19 @@ import SocialShare from './SocialShare.astro'; diff --git a/src/components/IssueList.astro b/src/components/IssueList.astro index a04b60a4..48797ea7 100644 --- a/src/components/IssueList.astro +++ b/src/components/IssueList.astro @@ -152,6 +152,15 @@ if (repoInfo) { margin-top: 1rem; padding-top: 1rem; border-top: 1px solid rgba(255, 255, 255, 0.1); + transition: border-color 0.3s ease; + } + + :global(.dark) .Card-Issues { + border-top-color: rgba(255, 255, 255, 0.1); + } + + :global:not(.dark) .Card-Issues { + border-top-color: rgba(0, 0, 0, 0.1); } .Issues-Header { @@ -164,7 +173,7 @@ if (repoInfo) { .Issues-Title { font-size: 0.9rem; font-weight: 600; - color: rgba(255, 255, 255, 0.9); + color: var(--text-primary); margin: 0; } @@ -193,26 +202,26 @@ if (repoInfo) { border: 1px solid rgba(255, 255, 255, 0.1); border-radius: 12px; text-decoration: none; - color: inherit; + color: var(--text-primary); transition: all 0.2s ease; gap: 0.75rem; } - .Issue-Card:hover { - background: rgba(255, 255, 255, 0.08); - border-color: rgba(102, 126, 234, 0.3); - transform: translateY(-1px); - box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15); + :global(.dark) .Issue-Card { + background: rgba(255, 255, 255, 0.05); + border-color: rgba(255, 255, 255, 0.1); } - .Issue-Content { - flex: 1; - min-width: 0; + :global:not(.dark) .Issue-Card { + background: rgba(0, 0, 0, 0.03); + border-color: rgba(0, 0, 0, 0.1); } - .Issue-Title { - font-size: 0.85rem; - color: rgba(255, 255, 255, 0.95); + .Issue-Card:hover { + background: rgba(255, 255, 255, 0.08); + border-color: rgba(102, 126, 234, 0.3); + transform: translateY(-1px); + box-shavar(--text-primary); margin: 0 0 0.5rem 0; line-height: 1.4; display: -webkit-box; @@ -227,6 +236,25 @@ if (repoInfo) { gap: 0.75rem; align-items: center; font-size: 0.75rem; + color: var(--text-secondary); + } + + .Issue-Number { + font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; + background: rgba(255, 255, 255, 0.1); + padding: 0.125rem 0.375rem; + border-radius: 6px; + font-size: 0.7rem; + transition: background-color 0.3s ease; + } + + :global(.dark) .Issue-Number { + background: rgba(255, 255, 255, 0.1); + } + + :global:not(.dark) .Issue-Number { + background: rgba(0, 0, 0, 0.1)er; + font-size: 0.75rem; color: rgba(255, 255, 255, 0.6); } @@ -264,25 +292,14 @@ if (repoInfo) { } .Issue-Label.help-wanted { - background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(59, 130, 246, 0.1) 100%); - color: #60a5fa; - border: 1px solid rgba(59, 130, 246, 0.3); - box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1); - } - - .no-issues { - text-align: center; - padding: 2rem 1rem; - color: rgba(255, 255, 255, 0.6); - } - - .no-issues-icon { - font-size: 2rem; - margin-bottom: 0.75rem; - opacity: 0.7; + backgrovar(--text-secondary); } .no-issues-text { + font-size: 0.9rem; + font-weight: 500; + margin-bottom: 0.25rem; + color: var(--text-primary)t { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.25rem; diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 1e171292..575d37b5 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -1,12 +1,14 @@ --- // Navbar component for social links +import DarkModeToggle from './DarkModeToggle.astro'; --- - diff --git a/dist/funding.json b/dist/funding.json deleted file mode 100644 index f61b82d5..00000000 --- a/dist/funding.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "version": "v1.0.0", - "entity": { - "type": "organisation", - "role": "owner", - "name": "firstcontributions", - "email": "firstcontributions@gmail.com", - "phone": "", - "description": "Improve accessibility with enhanced documentation tailored for beginners and create opportunities for first-time contributors to get involved. Focus on building great software while inspiring a thriving, collaborative community around open source projects.", - "webpageUrl": { - "url": "https://firstcontributions.github.io/" - } - }, - "projects": [ - { - "guid": "first-contributions", - "name": "First contributions", - "description": "Help beginners learn how to contribute to open-source projects. It provides a simple and beginner-friendly way for users to understand the contribution workflow using Git and GitHub. We've had over 90,000 users since we started in 2016", - "webpageUrl": { - "url": "https://firstcontributions.github.io/", - "wellKnown": "" - }, - "repositoryUrl": { - "url": "https://github.com/firstcontributions/first-contributions", - "wellKnown": "" - }, - "licenses": ["spdx:MIT"], - "tags": ["tutorial", "beginner", "open-source", "contribution"] - } - ], - "funding": { - "channels": [ - { - "guid": "opencollective", - "type": "payment-provider", - "address": "https://opencollective.com/firstcontributions", - "description": "Fiscal host is Open Source Collective. Payment methods can be found in https://docs.opencollective.com/help/financial-contributors/payments#select-a-payment-method" - }, - { - "guid": "github-sponsors", - "type": "payment-provider", - "address": "https://github.com/sponsors/firstcontributions", - "description": "Uses open collective" - } - ], - "plans": [ - { - "guid": "maintainer-time", - "status": "active", - "name": "Maintainer compensation", - "description": "This will compensate the effort of one maintainer working part-time on the projects.", - "amount": 30000, - "currency": "USD", - "frequency": "yearly", - "channels": ["opencollective", "github-sponsors"] - }, - { - "guid": "hosting-monthly", - "status": "active", - "name": "Hosting support", - "description": "This will cover the monthly server hosting costs for the projects.", - "amount": 30, - "currency": "USD", - "frequency": "monthly", - "channels": ["opencollective", "github-sponsors"] - } - ], - "history": [ - { - "year": 2024, - "income": 3, - "expenses": 0, - "taxes": 0, - "currency": "USD", - "description": "" - }, - { - "year": 2023, - "income": 5, - "expenses": 0, - "taxes": 0, - "currency": "USD", - "description": "" - } - ] - } -} diff --git a/dist/github.svg b/dist/github.svg deleted file mode 100644 index a09c6ac4..00000000 --- a/dist/github.svg +++ /dev/null @@ -1 +0,0 @@ -GitHub icon \ No newline at end of file diff --git a/dist/index.html b/dist/index.html deleted file mode 100644 index 0d5dd5e9..00000000 --- a/dist/index.html +++ /dev/null @@ -1,4 +0,0 @@ - First Contributions - Make your first open source contribution in 5 minutes

-Make your first
-open source contribution
in 5 minutes -

Share the news of your first contribution

\ No newline at end of file diff --git a/dist/manifest.json b/dist/manifest.json deleted file mode 100644 index 7a7d5d4d..00000000 --- a/dist/manifest.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "short_name": "First Contributions", - "name": "First Contributions", - "icons": [ - { - "src": "android-chrome-192x192.png", - "sizes": "192x192", - "type": "image/png" - }, - { - "src": "android-chrome-256x256.png", - "sizes": "256x256", - "type": "image/png" - } - ], - "theme_color": "#ffffff", - "background_color": "#ffffff", - "display": "standalone", - "start_url": "index.html" -} diff --git a/dist/mstile-150x150.png b/dist/mstile-150x150.png deleted file mode 100644 index 9f267aed037a11e96303367e1962ab5190cd21e1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1863 zcmcgtZB)`{6#ttxG#8d{X~CpX;!7F6kfGqzDazE9D21Y#B039?N@U`!oSK#0f2;Sx)Q$@j1jb8QWyYa+XFyu z0RSw6soXaJa10Fq(}w`S>mmSbO22eB90y*kNeBrF09K2*Dj66-Sj4bE$ZMlDX1gH0 z@!GEdV6BcA;1`)S^7ci@cd%nX&-|SIlzZ6W1c{j3NVW_KtSx$qa?0aI7xz2m`L8t- zXKx5t`|j1XJmdQgZ5uXPT0I^&O%-zqW^Dt@5Avg%YFnSOLa#va|23;-X%B1NuTlEBebB1m@3>iao4P;G-(I5x772Nd%gF%lcbwh zUF@Q{mk*B{6ms^J78F$AS}g}jcTplj2jaGzBU<69(J2^n^Op2bUAE^pS!Yx&Dc?VWEg5cj>HV~u({S&_k62rH;xP?h+SnKPw1-o9 zvrcU=?Mu~?9i;bvZW9Pq!ogz9Wd`<@uhzYs52Hp^_phjgAGS$4wY|&-E`=m+QigJg zOoYr_tax@bSy!(=d=_21vOWAo z({o|!b}6p&rP^;M0$D*@SK&_2IZc!g=_SFEzLiO&vikgZ*IN=gNwdo(BLvd zJdUhqJ{f-AenY)=CJH%bvOAy8duP`(H=fO%a~>two`Xx;FidPA>Gmqz(?>U?&?#Et zp>hso46JfO^u13%4Kv7>Z|> zA9%`NF^5@w$eTdv=6+`rkaqiDB?}+synWT|wq?mZ^IrC_T9Z4;Zt33BJ%;PsBDvz& z_6*lm%{P>1&L$EboxnFGdMubs$(Ez~?QhVrRofN^f6|Eiqiy?ZOtZ#VFAltTq5r9l|~6uYdlKKbyF`)2uk}KLqhx79=qUQ(E@iX?bwLGy$hT{<@>A)IT;`bnjsNMqm(B%VlF~_zF zevf!uIDl{R<(HDBBc6{5)S=$wj_!uR2&;}5pDI?);udRAF7~*X=ER)JVl6hPH(G_9 z6>#=($69MCNSMMY!^F63y@!IIq=~BD3AY2PMw6O0K9$~dy)Ea82k#hvjQos#CR6ni^imb4sb)e zdhSGf>_odox?;RMJiXAK&S*C;G+H%rn)f$AYFc7S68oP4_uKG}AmBiDB!xwaKaNOe zrX{5?=m-`&osLLJXVCy4>(a!+=f)ZP9UK&Ul`5i!1Q;SsU1+8jNQ;p3mWCFHfLxEx tL_?%B5}{Q8`mjsY1?z$+bAxNXaRH_`ZDcL@V?NCU5CgvrxZ!^&?=P2JNIn1n diff --git a/dist/safari-pinned-tab.svg b/dist/safari-pinned-tab.svg deleted file mode 100644 index be086ecb..00000000 --- a/dist/safari-pinned-tab.svg +++ /dev/null @@ -1,23 +0,0 @@ - - - - -Created by potrace 1.11, written by Peter Selinger 2001-2013 - - - - - diff --git a/dist/slack.svg b/dist/slack.svg deleted file mode 100644 index bcdf1619..00000000 --- a/dist/slack.svg +++ /dev/null @@ -1 +0,0 @@ -Slack icon \ No newline at end of file diff --git a/dist/twitter.svg b/dist/twitter.svg deleted file mode 100644 index dc4ca8cf..00000000 --- a/dist/twitter.svg +++ /dev/null @@ -1 +0,0 @@ -Twitter icon \ No newline at end of file diff --git a/dist/youtube.svg b/dist/youtube.svg deleted file mode 100644 index 58f5a90a..00000000 --- a/dist/youtube.svg +++ /dev/null @@ -1 +0,0 @@ -YouTube icon \ No newline at end of file diff --git a/src/components/DarkModeToggle.astro b/src/components/DarkModeToggle.astro index 03529672..80f9dbf3 100644 --- a/src/components/DarkModeToggle.astro +++ b/src/components/DarkModeToggle.astro @@ -24,13 +24,12 @@ function initDarkMode() { const toggle = document.getElementById('darkModeToggle'); const prefersDark = window.matchMedia('(prefers-color-scheme: dark)'); - + // Check localStorage or system preference const isDarkMode = localStorage.getItem('darkMode') === 'true' || (localStorage.getItem('darkMode') === null && prefersDark.matches); - + if (isDarkMode) { - document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } diff --git a/src/components/IssueList.astro b/src/components/IssueList.astro index 48797ea7..2ac27d48 100644 --- a/src/components/IssueList.astro +++ b/src/components/IssueList.astro @@ -27,76 +27,76 @@ async function fetchIssues(owner: string, repo: string) { 'Accept': 'application/vnd.github+json', 'User-Agent': 'FirstContributions' }; - + if (githubToken) { headers['Authorization'] = `Bearer ${githubToken}`; } - + // Try multiple requests for different label combinations const labelCombinations = [ 'good first issue,help wanted', // Both labels 'good first issue', // Just good first issue 'help wanted' // Just help wanted ]; - + let allIssues: any[] = []; - + for (const labels of labelCombinations) { const encodedLabels = encodeURIComponent(labels); const url = `https://api.github.com/repos/${owner}/${repo}/issues?labels=${encodedLabels}&state=open&per_page=10&sort=updated`; - + const response = await fetch(url, { headers }); - + if (response.status === 403) { return []; } - + if (!response.ok) { if (response.status === 404) { continue; // Try next combination } continue; // Try next combination } - + const issues = await response.json(); - + allIssues = [...allIssues, ...issues]; - + // If we found issues, break to avoid duplicates if (issues.length > 0) { break; } } - + // Remove duplicates based on issue number const uniqueIssues = allIssues.filter((issue, index, self) => index === self.findIndex(i => i.number === issue.number) ); - + if (uniqueIssues.length === 0) { return []; } - + // Process and prioritize issues const processedIssues = uniqueIssues.map((issue: any) => { const hasGoodFirstIssue = issue.labels.some((label: any) => label.name.toLowerCase().includes('good first issue') || label.name.toLowerCase().includes('good-first-issue') ); - + return { ...issue, priority: hasGoodFirstIssue ? 'good first issue' : 'help wanted' }; }); - + // Sort: good first issue first, then help wanted processedIssues.sort((a: any, b: any) => { if (a.priority === 'good first issue' && b.priority !== 'good first issue') return -1; if (a.priority !== 'good first issue' && b.priority === 'good first issue') return 1; return 0; }); - + return processedIssues.slice(0, 3); // Show only 3 issues } catch (error) { return []; @@ -221,7 +221,7 @@ if (repoInfo) { background: rgba(255, 255, 255, 0.08); border-color: rgba(102, 126, 234, 0.3); transform: translateY(-1px); - box-shavar(--text-primary); + box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); margin: 0 0 0.5rem 0; line-height: 1.4; display: -webkit-box; @@ -253,9 +253,9 @@ if (repoInfo) { } :global:not(.dark) .Issue-Number { - background: rgba(0, 0, 0, 0.1)er; + background: rgba(0, 0, 0, 0.1); font-size: 0.75rem; - color: rgba(255, 255, 255, 0.6); + color: rgba(0, 0, 0, 0.8); } .Issue-Number { @@ -292,18 +292,17 @@ if (repoInfo) { } .Issue-Label.help-wanted { - backgrovar(--text-secondary); + background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(59, 130, 246, 0.1) 100%); + color: #60a5fa; + border: 1px solid rgba(59, 130, 246, 0.3); + box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1); } .no-issues-text { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.25rem; - color: var(--text-primary)t { - font-size: 0.9rem; - font-weight: 500; - margin-bottom: 0.25rem; - color: rgba(255, 255, 255, 0.8); + color: var(--text-primary); } .no-issues-subtext { diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 575d37b5..40a7aecb 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -11,7 +11,7 @@ import DarkModeToggle from './DarkModeToggle.astro'; - Youtube + Youtube diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 112cd468..42a99858 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -8,13 +8,13 @@ export interface Props { type?: string; } -const { - title = "First Contributions - Make Your First Open Source Contribution in 5 Minutes", - description = "Learn how to make your first open source contribution in just 5 minutes. Step-by-step guide for beginners with beginner-friendly projects and resources.", - keywords = "open source, github, contribute to open source, beginner programmer, first contribution, git, pull request, coding, software development, programming, learn to code", - image = "https://firstcontributions.github.io/og-image.svg", - url = "https://firstcontributions.github.io/", - type = "website" +const { + title = "First Contributions - Make Your First Open Source Contribution in 5 Minutes", + description = "Learn how to make your first open source contribution in just 5 minutes. Step-by-step guide for beginners with beginner-friendly projects and resources.", + keywords = "open source, github, contribute to open source, beginner programmer, first contribution, git, pull request, coding, software development, programming, learn to code", + image = "https://firstcontributions.github.io/og-image.svg", + url = "https://firstcontributions.github.io/", + type = "website" } = Astro.props; --- From bff80c877c9c0f7e1ba78b403e2e953db402f61e Mon Sep 17 00:00:00 2001 From: Vishnu Date: Sun, 17 May 2026 11:18:19 +0530 Subject: [PATCH 3/5] Source-only cleanup: trim trailing whitespace; fix dark mode init and IssueList label/clamp --- src/components/DarkModeToggle.astro | 9 +++++---- src/components/IssueList.astro | 15 ++++++++++----- src/components/Navbar.astro | 6 +++--- src/layouts/Layout.astro | 18 +++++++++--------- 4 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/components/DarkModeToggle.astro b/src/components/DarkModeToggle.astro index 80f9dbf3..8aa80e1c 100644 --- a/src/components/DarkModeToggle.astro +++ b/src/components/DarkModeToggle.astro @@ -26,20 +26,21 @@ const prefersDark = window.matchMedia('(prefers-color-scheme: dark)'); // Check localStorage or system preference - const isDarkMode = localStorage.getItem('darkMode') === 'true' || + const isDarkMode = localStorage.getItem('darkMode') === 'true' || (localStorage.getItem('darkMode') === null && prefersDark.matches); if (isDarkMode) { + document.documentElement.classList.add('dark'); } else { document.documentElement.classList.remove('dark'); } - + // Toggle dark mode on button click toggle?.addEventListener('click', () => { const isDark = document.documentElement.classList.toggle('dark'); localStorage.setItem('darkMode', isDark); }); - + // Listen for system preference changes prefersDark.addEventListener('change', (e) => { if (localStorage.getItem('darkMode') === null) { @@ -51,7 +52,7 @@ } }); } - + // Run on page load if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initDarkMode); diff --git a/src/components/IssueList.astro b/src/components/IssueList.astro index 2ac27d48..7b278501 100644 --- a/src/components/IssueList.astro +++ b/src/components/IssueList.astro @@ -131,7 +131,7 @@ if (repoInfo) {
- + {issue.priority === 'good first issue' ? 'Good First Issue' : 'Help Wanted'}
@@ -224,10 +224,6 @@ if (repoInfo) { box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); margin: 0 0 0.5rem 0; line-height: 1.4; - display: -webkit-box; - -webkit-line-clamp: 2; - -webkit-box-orient: vertical; - overflow: hidden; font-weight: 500; } @@ -239,6 +235,15 @@ if (repoInfo) { color: var(--text-secondary); } + .Issue-Title { + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + line-height: 1.2; + font-weight: 500; + } + .Issue-Number { font-family: 'Monaco', 'Menlo', 'Ubuntu Mono', monospace; background: rgba(255, 255, 255, 0.1); diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 40a7aecb..4e05fde6 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -84,15 +84,15 @@ import DarkModeToggle from './DarkModeToggle.astro'; gap: 0.5rem; padding: 0.5rem; } - + .nav-links { gap: 1rem; } - + .topnav a { padding: 0.25rem 0.5rem; } - + .topnav span { display: none; } diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 42a99858..7757bbaf 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -23,7 +23,7 @@ const { - + @@ -36,20 +36,20 @@ const { - + - + {title} - + - + @@ -59,7 +59,7 @@ const { - + @@ -68,7 +68,7 @@ const { - +

+How to Contribute to Open Source: A Comprehensive Guide for Beginners +

+TL;DR if you prefer making your first pull request on GitHub right away, go to first contributions

+Contributing to open source is one of the most rewarding ways to grow + as a developer, build your portfolio, and give back to the community. + Whether you're a seasoned programmer or just starting out, open source + offers endless opportunities to learn, collaborate, and make an + impact. In this guide, we’ll walk you through everything you need to + know about contributing to open source, from finding the right project + to making your first contribution. +

Why Contribute to Open Source?

+Before diving into the "how," let’s explore the "why." Contributing to + open source offers numerous benefits: +

  • +Skill Development: Open source projects expose you to real-world + codebases, helping you improve your coding, debugging, and + collaboration skills. +
  • +Portfolio Building: Contributions to well-known projects can enhance + your resume and GitHub profile, making you stand out to potential + employers. +
  • +Networking: You’ll connect with developers worldwide, learn from + experts, and become part of a global community. +
  • +Giving Back: Open source powers much of the software we use daily. + Contributing is a way to support the tools and technologies you rely + on. +
  • +Career Opportunities: Many companies actively seek developers with + open source experience, as it demonstrates initiative and teamwork. +

How to Get Started with Open Source Contributions

1. Choose the Right Project

+Finding the right project is crucial. Look for projects that align + with your interests, skill level, and goals. Here’s how to find them: +

  • +Explore GitHub: Use GitHub’s Explore page or search for topics like + "good-first-issue" or "help-wanted." +
  • +Check Open Source Programs: Programs like Google Summer of Code or + Hacktoberfest are great for beginners. +
  • +Follow Your Tools: Contribute to libraries, frameworks, or tools you + already use. +

2. Understand the Project

Before contributing, take time to understand the project:

  • +Read the Documentation: Start with the README file, contribution + guidelines, and code of conduct. +
  • +Explore the Codebase: Familiarize yourself with the project + structure and coding style. +
  • +Join the Community: Participate in discussions on forums, Slack, or + Discord to get a feel for the community. +

3. Start Small

Begin with small, manageable tasks to build confidence:

  • +Fix Bugs: Look for issues labeled "good-first-issue" or + "beginner-friendly." +
  • +Improve Documentation: Documentation updates are often overlooked + but highly valuable. +
  • +Write Tests: Adding tests is a great way to contribute and learn + about the codebase. +

4. Follow Best Practices

When contributing, adhere to the project’s guidelines:

  • +Fork and Clone: Fork the repository and clone it to your local + machine. +
  • Create a Branch: Work on a separate branch for your changes.
  • +Write Clean Code: Follow the project’s coding standards and write + clear, concise code. +
  • +Test Your Changes: Ensure your changes don’t break existing + functionality. +
  • +Submit a Pull Request (PR): Write a clear PR description, reference + related issues, and be open to feedback. +

Tips for Success in Open Source

+Communicate Effectively: Be respectful and professional in all + interactions. Ask questions when unclear about requirements. Thank + reviewers for their time and feedback. Stay patient during the review + process +

+Be Consistent: Regular contributions, even small ones, can have a big + impact over time. +

+Learn from Feedback: Code reviews are a learning opportunity. Embrace + feedback and improve your skills. +

+Give Back: Once you’re comfortable, help others by reviewing PRs, + answering questions, or mentoring newcomers. +

Common Challenges and How to Overcome Them

  • +Imposter Syndrome: Many beginners feel they’re not skilled enough to + contribute. Remember, everyone starts somewhere, and even small + contributions matter. +
  • +Finding Time: Start with small, manageable tasks. Even 30 minutes a + week can make a difference. +
  • +Navigating Large Codebases: Break down the learning process: - Start + by reading the documentation thoroughly - Focus on understanding one + component at a time - Use debugging tools to trace code execution - + Don't hesitate to ask for clarification +

Conclusion

+Contributing to open source is a journey that offers immense personal + and professional growth. By starting small, staying consistent, and + engaging with the community, you can make meaningful contributions + while honing your skills. Remember, open source thrives on + collaboration, and every contribution—no matter how small—helps build + a better digital world. Ready to take the plunge? Find a project that + excites you, make your first contribution, and join the global open + source movement today! +

\ No newline at end of file diff --git a/dist/default.png b/dist/default.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef1e7dc751a2c683c21ac6b3abad0590c54530b GIT binary patch literal 46468 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
KWh5*LcqAu}#_McZKyF3nb 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 literal 0 HcmV?d00001 diff --git a/dist/favicon-16x16.png b/dist/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..c0a32a37ff365e6c28cb12e82252e1fd59fa4e78 GIT binary patch literal 491 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6SkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq9fFFuY1&V6d9Oz#v{QXIG#NP=YDR+ueoXe|!I#{Xiaj ziKnkC`$HBcetq_niO=kTLK8e)978nDCnqQ{%((dD4$m*1ddYo{t_2(_=u4Dj)^}>) zbe+|GaN0xjW&>tzv%PD0`gnpR^9*Z}PaMeGp?6rZZ847^kH5sB39XS2)-2~?m&`MY zNl7^J)re7}u@#IbxmqMGB$s^99*$tOf%E<4>_9IR|+;pxabSTq8Cy&nOiTJTUc4xd$I_#u!2j2$>9`c<;@`q pr*B+2apcSqnIr6{8$1?x=`p+#7cBYYWD0Tk4UEa{HEjtmSN`?>!lvVtU&J%W50 z7^>757#dm_7=8hT8eT9klo~KFyh>nTu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE zr>`sfLl!1}efE=y&+Hi(7>AjQ96 zg2$J8&X%)Yni$Ot3W++au|>%xO{nSE4mF|ag`6Ar9w@X}E*!S=`}Y6Ywb`FvPyPFB z-{mQWcQ`UX$cF9ZdiCtm)7c*%Ih@>_JNKfp@5TnXwPjOnUtF7YXaCVn4^B>9@S``h zWtUFoj}M9~Bs@NuWQX0HX3l@@E@#-J%6_Zz2N$=xKF)j07&x2vq^8xj%%j~td!j`W zj(0XWO51ndmMJXDI=IDo>K2AotL$}kKED6Q{7*q4*~$9Ylgkf3zj`Ojd2P!Q#xvYr zZZRufcFSe5BYgxrs$!lw$>BM&KcbY#t&c$d^Z1f3W zP^p%8f};Gi%$!t(lFEWqh0KDIWCn(cIgdZ_a1@4VXq@st zea7=?5CgL^w_Y;0u(GiCWD#az1(ybs!zs+ln?n>%-?(z($eANDN7zp{cr5VJV|XPl USn|oq6yzobPgg&ebxsLQ01rLwo&W#< literal 0 HcmV?d00001 diff --git a/dist/favicon.ico b/dist/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..77633fb08cef68c8348650a4d6a12c12accab450 GIT binary patch literal 15087 zcmeI2TZmOv7{~W`X4EEgbQ;rOY))3FiJ@Sk_Ap~$hA)Gq78x-l!aPVLC=z%njC@f@ zk)VfSC_{>ZmdK_IvpJk34$Y>8-myW8%u*=4Ht~z8ma^h zp!41Kbk6y|J_0@hJ_5anzyPk90&l~77z-&V2CGEmM(BVLZozR_0_vCRwi1ETEbVcw zbNm*#Y*mQc57K=Z*25QY6LfAHJOr-VQwY;ok=8vh7^>kf(7ARP2Cka49RO*)0Lwt* z=^xO!oiGSow$+G})}CZJ_pZyrBW=U+-$Gn}7sp?M%VP(5d8?yz4NMsaTFxvYOFBDJpn0mj4j=vet3 zW5u9<7h-3?&!GNje`xk7F6*C!&J&Sl<)pMPm;MZF0euBA4P4!SX|9dLx70|J02Xk*II$;&4sDW|N3?|2>zMO?FF!~Qst^!x>VT7%K_?R);<#jLKfl_eQ z$`GbL{0njIrmTGEE8w!}U3?g%S@&WiYz8xyS}41mLm!2{V<7!|LC;9MPkN4Behx;U z?^lribD()>6`1^O8)fCBT{W$NJ_0l5wZ_nVq+|Kz;JPW#`5nZc;~N||gUe$Fd3hU3 zX&!tC@53x`J@1c1Z$1J(0yZKLb{i9OuYI;6WEKy@?0}rlq$0ndhmZbmt_!1jwtY>m z-E2kV>mxri@~NB;OCoKdBZ{Nq?kG}`w`FoaUUh~~c zP-gl0f0FioflF{6=7P-D{4)Zgo6Vpc-cMjFfBFb*eFo-x8Lb6h1DmG4z6@`I)_%6` zJxzJL8xiPE&&2;^Ye>P6qR7_ge8_Qc+0C`>&q+K~kGW1-%CsC#@J=KN_$3V_uQfH}g$j^jFeX zy+<{7jfJHB*Kb31K^wddCm>1u%D8?yd<=hp-lJO6B(-uXw7?!v{zLsrYD=lG4>p6| qD@jdbei95%TCum+=W?FB@M~G{K=|H&>Ehf?$UyfswOkYCD8CJ+yx5rl literal 0 HcmV?d00001 diff --git a/dist/favicon.svg b/dist/favicon.svg new file mode 100644 index 00000000..f157bd1c --- /dev/null +++ b/dist/favicon.svg @@ -0,0 +1,9 @@ + + + + diff --git a/dist/funding.json b/dist/funding.json new file mode 100644 index 00000000..f61b82d5 --- /dev/null +++ b/dist/funding.json @@ -0,0 +1,87 @@ +{ + "version": "v1.0.0", + "entity": { + "type": "organisation", + "role": "owner", + "name": "firstcontributions", + "email": "firstcontributions@gmail.com", + "phone": "", + "description": "Improve accessibility with enhanced documentation tailored for beginners and create opportunities for first-time contributors to get involved. Focus on building great software while inspiring a thriving, collaborative community around open source projects.", + "webpageUrl": { + "url": "https://firstcontributions.github.io/" + } + }, + "projects": [ + { + "guid": "first-contributions", + "name": "First contributions", + "description": "Help beginners learn how to contribute to open-source projects. It provides a simple and beginner-friendly way for users to understand the contribution workflow using Git and GitHub. We've had over 90,000 users since we started in 2016", + "webpageUrl": { + "url": "https://firstcontributions.github.io/", + "wellKnown": "" + }, + "repositoryUrl": { + "url": "https://github.com/firstcontributions/first-contributions", + "wellKnown": "" + }, + "licenses": ["spdx:MIT"], + "tags": ["tutorial", "beginner", "open-source", "contribution"] + } + ], + "funding": { + "channels": [ + { + "guid": "opencollective", + "type": "payment-provider", + "address": "https://opencollective.com/firstcontributions", + "description": "Fiscal host is Open Source Collective. Payment methods can be found in https://docs.opencollective.com/help/financial-contributors/payments#select-a-payment-method" + }, + { + "guid": "github-sponsors", + "type": "payment-provider", + "address": "https://github.com/sponsors/firstcontributions", + "description": "Uses open collective" + } + ], + "plans": [ + { + "guid": "maintainer-time", + "status": "active", + "name": "Maintainer compensation", + "description": "This will compensate the effort of one maintainer working part-time on the projects.", + "amount": 30000, + "currency": "USD", + "frequency": "yearly", + "channels": ["opencollective", "github-sponsors"] + }, + { + "guid": "hosting-monthly", + "status": "active", + "name": "Hosting support", + "description": "This will cover the monthly server hosting costs for the projects.", + "amount": 30, + "currency": "USD", + "frequency": "monthly", + "channels": ["opencollective", "github-sponsors"] + } + ], + "history": [ + { + "year": 2024, + "income": 3, + "expenses": 0, + "taxes": 0, + "currency": "USD", + "description": "" + }, + { + "year": 2023, + "income": 5, + "expenses": 0, + "taxes": 0, + "currency": "USD", + "description": "" + } + ] + } +} diff --git a/dist/github.svg b/dist/github.svg new file mode 100644 index 00000000..a09c6ac4 --- /dev/null +++ b/dist/github.svg @@ -0,0 +1 @@ +GitHub icon \ No newline at end of file diff --git a/dist/index.html b/dist/index.html new file mode 100644 index 00000000..0d5dd5e9 --- /dev/null +++ b/dist/index.html @@ -0,0 +1,4 @@ + First Contributions - Make your first open source contribution in 5 minutes

+Make your first
+open source contribution
in 5 minutes +

Share the news of your first contribution

\ No newline at end of file diff --git a/dist/manifest.json b/dist/manifest.json new file mode 100644 index 00000000..7a7d5d4d --- /dev/null +++ b/dist/manifest.json @@ -0,0 +1,20 @@ +{ + "short_name": "First Contributions", + "name": "First Contributions", + "icons": [ + { + "src": "android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "android-chrome-256x256.png", + "sizes": "256x256", + "type": "image/png" + } + ], + "theme_color": "#ffffff", + "background_color": "#ffffff", + "display": "standalone", + "start_url": "index.html" +} diff --git a/dist/mstile-150x150.png b/dist/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..9f267aed037a11e96303367e1962ab5190cd21e1 GIT binary patch literal 1863 zcmcgtZB)`{6#ttxG#8d{X~CpX;!7F6kfGqzDazE9D21Y#B039?N@U`!oSK#0f2;Sx)Q$@j1jb8QWyYa+XFyu z0RSw6soXaJa10Fq(}w`S>mmSbO22eB90y*kNeBrF09K2*Dj66-Sj4bE$ZMlDX1gH0 z@!GEdV6BcA;1`)S^7ci@cd%nX&-|SIlzZ6W1c{j3NVW_KtSx$qa?0aI7xz2m`L8t- zXKx5t`|j1XJmdQgZ5uXPT0I^&O%-zqW^Dt@5Avg%YFnSOLa#va|23;-X%B1NuTlEBebB1m@3>iao4P;G-(I5x772Nd%gF%lcbwh zUF@Q{mk*B{6ms^J78F$AS}g}jcTplj2jaGzBU<69(J2^n^Op2bUAE^pS!Yx&Dc?VWEg5cj>HV~u({S&_k62rH;xP?h+SnKPw1-o9 zvrcU=?Mu~?9i;bvZW9Pq!ogz9Wd`<@uhzYs52Hp^_phjgAGS$4wY|&-E`=m+QigJg zOoYr_tax@bSy!(=d=_21vOWAo z({o|!b}6p&rP^;M0$D*@SK&_2IZc!g=_SFEzLiO&vikgZ*IN=gNwdo(BLvd zJdUhqJ{f-AenY)=CJH%bvOAy8duP`(H=fO%a~>two`Xx;FidPA>Gmqz(?>U?&?#Et zp>hso46JfO^u13%4Kv7>Z|> zA9%`NF^5@w$eTdv=6+`rkaqiDB?}+synWT|wq?mZ^IrC_T9Z4;Zt33BJ%;PsBDvz& z_6*lm%{P>1&L$EboxnFGdMubs$(Ez~?QhVrRofN^f6|Eiqiy?ZOtZ#VFAltTq5r9l|~6uYdlKKbyF`)2uk}KLqhx79=qUQ(E@iX?bwLGy$hT{<@>A)IT;`bnjsNMqm(B%VlF~_zF zevf!uIDl{R<(HDBBc6{5)S=$wj_!uR2&;}5pDI?);udRAF7~*X=ER)JVl6hPH(G_9 z6>#=($69MCNSMMY!^F63y@!IIq=~BD3AY2PMw6O0K9$~dy)Ea82k#hvjQos#CR6ni^imb4sb)e zdhSGf>_odox?;RMJiXAK&S*C;G+H%rn)f$AYFc7S68oP4_uKG}AmBiDB!xwaKaNOe zrX{5?=m-`&osLLJXVCy4>(a!+=f)ZP9UK&Ul`5i!1Q;SsU1+8jNQ;p3mWCFHfLxEx tL_?%B5}{Q8`mjsY1?z$+bAxNXaRH_`ZDcL@V?NCU5CgvrxZ!^&?=P2JNIn1n literal 0 HcmV?d00001 diff --git a/dist/og-image.svg b/dist/og-image.svg new file mode 100644 index 00000000..a6624382 --- /dev/null +++ b/dist/og-image.svg @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + First Contributions + + + + + Make Your First Open Source Contribution + + + + + Learn in just 5 minutes • Beginner-friendly • Step-by-step guide + + + + + + + + + + + firstcontributions.github.io + + diff --git a/dist/robots.txt b/dist/robots.txt new file mode 100644 index 00000000..8fb19857 --- /dev/null +++ b/dist/robots.txt @@ -0,0 +1,8 @@ +User-agent: * +Allow: / + +# Sitemap +Sitemap: https://firstcontributions.github.io/sitemap.xml + +# Crawl-delay +Crawl-delay: 1 diff --git a/dist/safari-pinned-tab.svg b/dist/safari-pinned-tab.svg new file mode 100644 index 00000000..be086ecb --- /dev/null +++ b/dist/safari-pinned-tab.svg @@ -0,0 +1,23 @@ + + + + +Created by potrace 1.11, written by Peter Selinger 2001-2013 + + + + + diff --git a/dist/sitemap.xml b/dist/sitemap.xml new file mode 100644 index 00000000..21cbc82b --- /dev/null +++ b/dist/sitemap.xml @@ -0,0 +1,15 @@ + + + + https://firstcontributions.github.io/ + 2025-01-27 + weekly + 1.0 + + + https://firstcontributions.github.io/contribute-to-opensource + 2025-01-27 + monthly + 0.8 + + diff --git a/dist/slack.svg b/dist/slack.svg new file mode 100644 index 00000000..bcdf1619 --- /dev/null +++ b/dist/slack.svg @@ -0,0 +1 @@ +Slack icon \ No newline at end of file diff --git a/dist/twitter.svg b/dist/twitter.svg new file mode 100644 index 00000000..dc4ca8cf --- /dev/null +++ b/dist/twitter.svg @@ -0,0 +1 @@ +Twitter icon \ No newline at end of file diff --git a/dist/youtube.svg b/dist/youtube.svg new file mode 100644 index 00000000..58f5a90a --- /dev/null +++ b/dist/youtube.svg @@ -0,0 +1 @@ +YouTube icon \ No newline at end of file From a4f6d76f8ff77e6c14c82bddeb49082006e1bf98 Mon Sep 17 00:00:00 2001 From: Vishnu Date: Sun, 17 May 2026 11:37:31 +0530 Subject: [PATCH 5/5] Revert "Fix IssueList CSS, remove generated .astro/dist artifacts, and clean whitespace" This reverts commit f1395f03a37d1e760edf345d7e1fecdf3933af6f. --- .gitignore | 1 - src/components/DarkModeToggle.astro | 4 +-- src/components/IssueList.astro | 49 +++++++++++++++-------------- src/components/Navbar.astro | 2 +- src/layouts/Layout.astro | 14 ++++----- 5 files changed, 35 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 7c980d28..bb30eb36 100644 --- a/.gitignore +++ b/.gitignore @@ -17,5 +17,4 @@ package-lock.json yarn-error.log # astro build -.astro dist diff --git a/src/components/DarkModeToggle.astro b/src/components/DarkModeToggle.astro index 8aa80e1c..2f66fa50 100644 --- a/src/components/DarkModeToggle.astro +++ b/src/components/DarkModeToggle.astro @@ -24,11 +24,11 @@ function initDarkMode() { const toggle = document.getElementById('darkModeToggle'); const prefersDark = window.matchMedia('(prefers-color-scheme: dark)'); - + // Check localStorage or system preference const isDarkMode = localStorage.getItem('darkMode') === 'true' || (localStorage.getItem('darkMode') === null && prefersDark.matches); - + if (isDarkMode) { document.documentElement.classList.add('dark'); } else { diff --git a/src/components/IssueList.astro b/src/components/IssueList.astro index 7b278501..ac674ee8 100644 --- a/src/components/IssueList.astro +++ b/src/components/IssueList.astro @@ -27,76 +27,76 @@ async function fetchIssues(owner: string, repo: string) { 'Accept': 'application/vnd.github+json', 'User-Agent': 'FirstContributions' }; - + if (githubToken) { headers['Authorization'] = `Bearer ${githubToken}`; } - + // Try multiple requests for different label combinations const labelCombinations = [ 'good first issue,help wanted', // Both labels 'good first issue', // Just good first issue 'help wanted' // Just help wanted ]; - + let allIssues: any[] = []; - + for (const labels of labelCombinations) { const encodedLabels = encodeURIComponent(labels); const url = `https://api.github.com/repos/${owner}/${repo}/issues?labels=${encodedLabels}&state=open&per_page=10&sort=updated`; - + const response = await fetch(url, { headers }); - + if (response.status === 403) { return []; } - + if (!response.ok) { if (response.status === 404) { continue; // Try next combination } continue; // Try next combination } - + const issues = await response.json(); - + allIssues = [...allIssues, ...issues]; - + // If we found issues, break to avoid duplicates if (issues.length > 0) { break; } } - + // Remove duplicates based on issue number const uniqueIssues = allIssues.filter((issue, index, self) => index === self.findIndex(i => i.number === issue.number) ); - + if (uniqueIssues.length === 0) { return []; } - + // Process and prioritize issues const processedIssues = uniqueIssues.map((issue: any) => { const hasGoodFirstIssue = issue.labels.some((label: any) => label.name.toLowerCase().includes('good first issue') || label.name.toLowerCase().includes('good-first-issue') ); - + return { ...issue, priority: hasGoodFirstIssue ? 'good first issue' : 'help wanted' }; }); - + // Sort: good first issue first, then help wanted processedIssues.sort((a: any, b: any) => { if (a.priority === 'good first issue' && b.priority !== 'good first issue') return -1; if (a.priority !== 'good first issue' && b.priority === 'good first issue') return 1; return 0; }); - + return processedIssues.slice(0, 3); // Show only 3 issues } catch (error) { return []; @@ -221,7 +221,7 @@ if (repoInfo) { background: rgba(255, 255, 255, 0.08); border-color: rgba(102, 126, 234, 0.3); transform: translateY(-1px); - box-shadow: 0 2px 12px rgba(0, 0, 0, 0.08); + box-shavar(--text-primary); margin: 0 0 0.5rem 0; line-height: 1.4; font-weight: 500; @@ -258,9 +258,9 @@ if (repoInfo) { } :global:not(.dark) .Issue-Number { - background: rgba(0, 0, 0, 0.1); + background: rgba(0, 0, 0, 0.1)er; font-size: 0.75rem; - color: rgba(0, 0, 0, 0.8); + color: rgba(255, 255, 255, 0.6); } .Issue-Number { @@ -297,17 +297,18 @@ if (repoInfo) { } .Issue-Label.help-wanted { - background: linear-gradient(135deg, rgba(59, 130, 246, 0.2) 0%, rgba(59, 130, 246, 0.1) 100%); - color: #60a5fa; - border: 1px solid rgba(59, 130, 246, 0.3); - box-shadow: 0 2px 4px rgba(59, 130, 246, 0.1); + backgrovar(--text-secondary); } .no-issues-text { font-size: 0.9rem; font-weight: 500; margin-bottom: 0.25rem; - color: var(--text-primary); + color: var(--text-primary)t { + font-size: 0.9rem; + font-weight: 500; + margin-bottom: 0.25rem; + color: rgba(255, 255, 255, 0.8); } .no-issues-subtext { diff --git a/src/components/Navbar.astro b/src/components/Navbar.astro index 4e05fde6..6fdc343b 100644 --- a/src/components/Navbar.astro +++ b/src/components/Navbar.astro @@ -11,7 +11,7 @@ import DarkModeToggle from './DarkModeToggle.astro'; - Youtube + Youtube diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 7757bbaf..c36aacbd 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -8,13 +8,13 @@ export interface Props { type?: string; } -const { - title = "First Contributions - Make Your First Open Source Contribution in 5 Minutes", - description = "Learn how to make your first open source contribution in just 5 minutes. Step-by-step guide for beginners with beginner-friendly projects and resources.", - keywords = "open source, github, contribute to open source, beginner programmer, first contribution, git, pull request, coding, software development, programming, learn to code", - image = "https://firstcontributions.github.io/og-image.svg", - url = "https://firstcontributions.github.io/", - type = "website" +const { + title = "First Contributions - Make Your First Open Source Contribution in 5 Minutes", + description = "Learn how to make your first open source contribution in just 5 minutes. Step-by-step guide for beginners with beginner-friendly projects and resources.", + keywords = "open source, github, contribute to open source, beginner programmer, first contribution, git, pull request, coding, software development, programming, learn to code", + image = "https://firstcontributions.github.io/og-image.svg", + url = "https://firstcontributions.github.io/", + type = "website" } = Astro.props; ---