From 14cab02398430fb799de4232ec097ddfc51d82f8 Mon Sep 17 00:00:00 2001 From: Eric Fennis Date: Mon, 2 Nov 2026 12:21:25 +0100 Subject: [PATCH] feat(site): Add sponsor page (#5132) * feat(docs): add sponsor page Add a /sponsor page to lucide.dev with sponsor tiers, an amount picker, a sponsor wall and a FAQ. - Fetch active Open Collective sponsors at build time into sponsorsData.json, falling back to an empty list when the API fails - Group sponsors by monthly amount so the wall keeps working while the Open Collective tiers are renamed - Add reusable SponsorLogoGrid and SponsorAvatars components - Add general Faq/FaqItem components fed by `faq` frontmatter, which also emits FAQPage structured data - Link the page from the nav, footer and the home page sponsor card Co-Authored-By: Claude Opus 5.5 * feat(docs): add navbar sponsor button, more sponsor stats and tier links - Replace the Sponsor nav text link with a dedicated heart button in the navbar, shown icon-only at tablet widths where the menu is crowded - Show weekly npm downloads across all Lucide packages and the all-time Open Collective sponsor count in the sponsor page hero - Add tierLinks.ts for direct Open Collective and GitHub Sponsors tier checkout links, falling back to the general pages while empty Co-Authored-By: Claude Opus 5.5 * feat(docs): update team member titles and add funding manifest * update tier links * Adjust hero * Add motion counter to hero * Add custom option * Add scroll padding * Fix reduce motion sponsor page * Refactor sponsor tier links into tier data Store only the Open Collective tier slug and GitHub Sponsors tier id on each tier and derive the checkout URLs from them, so amounts are no longer duplicated in the links. Removes tierLinks.ts and the circular import between it and tiers.ts. Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_01G9u8FefqMHXb8HoeQ8LhcU * Set transition duration to zero * Add social links * Fix stikcybar * Format code * Refactor SponsorAmountPicker and SponsorHeroAnimation Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> * Fix sponsor animation * Adjust tiers * Update readmes * Update sponsors * Update sponsors * Update sponsors * Update logo gris size * Add breaking space * Update logos --------- Co-authored-by: Claude Opus 5.5 Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com> --- .gitignore | 2 + .well-known/funding-manifest-urls | 1 + README.md | 37 +- docs/.vitepress/config.ts | 4 + docs/.vitepress/data/teamData.json | 6 +- docs/.vitepress/getStructuredData.ts | 20 + docs/.vitepress/theme/components/base/Faq.vue | 71 +++ .../theme/components/base/FaqItem.vue | 74 +++ .../theme/components/base/MotionCounter.vue | 71 +++ .../theme/components/base/PageTabs.vue | 2 +- .../theme/components/home/HomeSponsorCard.vue | 2 +- .../theme/components/icons/StickyBar.vue | 2 +- .../theme/components/overrides/VPFooter.vue | 4 + .../sponsor/SponsorAmountPicker.vue | 466 ++++++++++++++++++ .../components/sponsor/SponsorAvatars.vue | 123 +++++ .../theme/components/sponsor/SponsorCta.vue | 71 +++ .../components/sponsor/SponsorFundingUses.vue | 105 ++++ .../theme/components/sponsor/SponsorHero.vue | 196 ++++++++ .../sponsor/SponsorHeroAnimation.vue | 259 ++++++++++ .../components/sponsor/SponsorLogoGrid.vue | 186 +++++++ .../components/sponsor/SponsorSection.vue | 51 ++ .../sponsor/SponsorSectionHeader.vue | 43 ++ .../components/sponsor/SponsorStats.data.ts | 82 +++ .../components/sponsor/SponsorTierCard.vue | 188 +++++++ .../theme/components/sponsor/SponsorTiers.vue | 273 ++++++++++ .../theme/components/sponsor/SponsorWall.vue | 42 ++ .../theme/components/sponsor/sponsors.ts | 26 + .../theme/components/sponsor/tiers.ts | 170 +++++++ docs/.vitepress/theme/index.ts | 2 + .../theme/layouts/NavBarSponsorButton.vue | 95 ++++ docs/.vitepress/theme/style.css | 3 +- docs/.vitepress/transformPageData.ts | 11 +- docs/package.json | 1 + docs/public/funding.json | 85 ++++ docs/public/sponsors/dark/sourcegraph.svg | 1 + docs/public/sponsors/dark/zephyr-cloud.svg | 1 + docs/public/sponsors/sourcegraph.svg | 1 + docs/public/sponsors/zephyr-cloud.svg | 16 +- docs/scripts/helpers/openCollective.mts | 164 ++++++ docs/scripts/writeSponsorsData.mts | 69 +++ docs/sponsor.md | 45 ++ packages/angular/README.md | 19 +- packages/astro/README.md | 19 +- packages/icons/README.md | 19 +- packages/lucide-preact/README.md | 19 +- packages/lucide-react-native/README.md | 19 +- packages/lucide-react/README.md | 19 +- packages/lucide-solid/README.md | 19 +- packages/lucide-static/README.md | 19 +- packages/lucide/README.md | 19 +- packages/solid/README.md | 19 +- packages/svelte/README.md | 19 +- packages/vue/README.md | 19 +- scripts/updateSponsors.mts | 204 +++----- 54 files changed, 3151 insertions(+), 352 deletions(-) create mode 100644 .well-known/funding-manifest-urls create mode 100644 docs/.vitepress/theme/components/base/Faq.vue create mode 100644 docs/.vitepress/theme/components/base/FaqItem.vue create mode 100644 docs/.vitepress/theme/components/base/MotionCounter.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorAmountPicker.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorAvatars.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorCta.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorFundingUses.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorHero.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorHeroAnimation.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorLogoGrid.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorSection.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorSectionHeader.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorStats.data.ts create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorTierCard.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorTiers.vue create mode 100644 docs/.vitepress/theme/components/sponsor/SponsorWall.vue create mode 100644 docs/.vitepress/theme/components/sponsor/sponsors.ts create mode 100644 docs/.vitepress/theme/components/sponsor/tiers.ts create mode 100644 docs/.vitepress/theme/layouts/NavBarSponsorButton.vue create mode 100644 docs/public/funding.json create mode 100644 docs/public/sponsors/dark/sourcegraph.svg create mode 100644 docs/public/sponsors/dark/zephyr-cloud.svg create mode 100644 docs/public/sponsors/sourcegraph.svg create mode 100644 docs/scripts/helpers/openCollective.mts create mode 100644 docs/scripts/writeSponsorsData.mts create mode 100644 docs/sponsor.md diff --git a/.gitignore b/.gitignore index 311a10f5f..65c92835e 100644 --- a/.gitignore +++ b/.gitignore @@ -66,6 +66,7 @@ docs/.vitepress/data/categoriesData.json docs/.vitepress/data/iconDetails docs/.vitepress/data/relatedIcons.json docs/.vitepress/data/brandStopwords.json +docs/.vitepress/data/sponsorsData.json docs/.vitepress/data/iconPopularity docs/.vitepress/data/lab/iconNodes docs/.vitepress/data/lab/iconMetaData.ts @@ -74,3 +75,4 @@ docs/.vercel docs/.nitro docs/public/og/** !docs/public/og/general.png +.claude diff --git a/.well-known/funding-manifest-urls b/.well-known/funding-manifest-urls new file mode 100644 index 000000000..7358527f3 --- /dev/null +++ b/.well-known/funding-manifest-urls @@ -0,0 +1 @@ +https://lucide.dev/funding.json diff --git a/README.md b/README.md index fbb9b6abf..b0da062d6 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,9 @@

- - Lucide - Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons. - - - Lucide - Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons. + + + + Lucide - Beautiful & consistent icon toolkit made by the community. Open-source project and a fork of Feather Icons. +

@@ -88,24 +88,29 @@ Thank you to all the people who contributed to Lucide! Powered by Vercel -DigitalOcean Referral Badge - [//]: <> (Sponsor tiers start) -### Hero Backer ๐Ÿฆธ +### Bronze ๐Ÿฅ‰ -Sourcegraph โ€“ Understand, fix, and automate across your codebase with Sourcegraph's code intelligence platform -Zephyr Cloud +Sourcegraph โ€“ Understand, fix, and automate across your codebase with Sourcegraph's code intelligence platform +   +Zephyr Cloud -### Awesome backers ๐Ÿบ +[//]: <> (Main README only start) -Pax Historia -pdfme โ€“ Free and Open source PDF generation library! +### Backers ๐Ÿบ -### Backer โ˜•๏ธ +Pax Historia +   +pdfme โ€“ Free and Open source PDF generation library! -Fina Money โ€“ Build the most flexible finance tracker -Ruud +### Supporters โ˜•๏ธ + +Fina Money โ€“ Build the most flexible finance tracker +   +Ruud + +[//]: <> (Main README only end) [//]: <> (Sponsor tiers end) diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts index 251223308..8adfc47e8 100644 --- a/docs/.vitepress/config.ts +++ b/docs/.vitepress/config.ts @@ -88,6 +88,7 @@ export default defineConfig({ 'index.md', 'packages.md', 'showcase.md', + 'sponsor.md', 'brand-logo-statement.md', 'icons/**', // Not working, need investigation ], @@ -123,6 +124,9 @@ export default defineConfig({ socialLinks: [ { icon: 'github', link: 'https://github.com/lucide-icons/lucide' }, { icon: 'discord', link: 'https://discord.gg/EH6nSts' }, + { icon: 'x', link: 'https://x.com/lucide_icons' }, + { icon: 'linkedin', link: 'https://www.linkedin.com/company/lucide-icons/' }, + { icon: 'bluesky', link: 'https://bsky.app/profile/lucide-icons.bsky.social' }, ], footer: { message: 'Released under the ISC License.', diff --git a/docs/.vitepress/data/teamData.json b/docs/.vitepress/data/teamData.json index 07cf6a1cb..7f32f9177 100644 --- a/docs/.vitepress/data/teamData.json +++ b/docs/.vitepress/data/teamData.json @@ -9,6 +9,10 @@ "icon": "github", "link": "https://github.com/ericfennis" }, + { + "icon": "linkedin", + "link": "https://www.linkedin.com/in/ericfennis" + }, { "icon": "x", "link": "https://x.com/ericfennis" @@ -36,7 +40,7 @@ }, { "name": "Jakob Guddas", - "title": "Creator of Lucide Studio", + "title": "Creator of Lucide Studio & Software engineer @LEGO", "image": "https://github.com/jguddas.png?size=192", "socialLinks": [ { diff --git a/docs/.vitepress/getStructuredData.ts b/docs/.vitepress/getStructuredData.ts index 7fde3ff12..d66373378 100644 --- a/docs/.vitepress/getStructuredData.ts +++ b/docs/.vitepress/getStructuredData.ts @@ -79,3 +79,23 @@ export default async function getStructuredData(iconName: string, pageData: Page }, }; } + +export interface FaqEntry { + question: string; + answer: string; +} + +export function getFaqStructuredData(faq: FaqEntry[]) { + return { + '@context': 'https://schema.org', + '@type': 'FAQPage', + mainEntity: faq.map(({ question, answer }) => ({ + '@type': 'Question', + name: question, + acceptedAnswer: { + '@type': 'Answer', + text: answer, + }, + })), + }; +} diff --git a/docs/.vitepress/theme/components/base/Faq.vue b/docs/.vitepress/theme/components/base/Faq.vue new file mode 100644 index 000000000..8d8ec9682 --- /dev/null +++ b/docs/.vitepress/theme/components/base/Faq.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/docs/.vitepress/theme/components/base/FaqItem.vue b/docs/.vitepress/theme/components/base/FaqItem.vue new file mode 100644 index 000000000..8ebed3fb4 --- /dev/null +++ b/docs/.vitepress/theme/components/base/FaqItem.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/docs/.vitepress/theme/components/base/MotionCounter.vue b/docs/.vitepress/theme/components/base/MotionCounter.vue new file mode 100644 index 000000000..bf9381367 --- /dev/null +++ b/docs/.vitepress/theme/components/base/MotionCounter.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/docs/.vitepress/theme/components/base/PageTabs.vue b/docs/.vitepress/theme/components/base/PageTabs.vue index 8276ceb12..be3fe7de7 100644 --- a/docs/.vitepress/theme/components/base/PageTabs.vue +++ b/docs/.vitepress/theme/components/base/PageTabs.vue @@ -7,7 +7,7 @@