feat(sponsor): add /sponsor page with live progress + source breakdown#640
feat(sponsor): add /sponsor page with live progress + source breakdown#640js360000 wants to merge 2 commits into
Conversation
Closes ddev#631. New page at /sponsor focused entirely on financial sponsorship: - Live progress block: current monthly recurring vs. ${'$'}12k goal, percentage bar, "+${'$'}X vs. one week ago" delta. Data fetched at build time from https://ddev.github.io/sponsorship-data/data/all-sponsorships.json with a fallback snapshot so the build never breaks on a transient network failure. - Three side-by-side CTAs for GitHub Sponsors, PayPal, and direct invoice, each with a one-line description targeted at its likely audience. - Source breakdown table — monthly recurring equivalent by channel (GitHub Sponsors, monthly invoiced, annual invoiced normalized to monthly, PayPal). Annual sponsorships are converted to a monthly figure for direct comparison. - Featured organizations block reusing the existing FeaturedSponsors component. - Bubble grid of all current sponsors via the existing Sponsors component (the piece the issue specifically asked to keep from the support-ddev page). - Footer CTA repeat + 501(c)(3) note pointing at /foundation. The /support-ddev page is unchanged in scope but now opens with a clearly-marked banner linking financial sponsors to /sponsor, and its table-of-contents item for "Financial Support" points there too. The existing financial section on /support-ddev stays in place so external links aren't broken; /sponsor is the canonical entry going forward. Implementation notes: - Build-time fetch uses AbortSignal.timeout(8000) and a typed fallback so the page renders even if the data endpoint is unreachable. Cloudflare Pages can be configured to rebuild daily to pull the latest snapshot; alternatively a small client-side refresh script could be added as a follow-up. - Direct, factual copy throughout per AGENTS.md — no marketing superlatives, no flowery framing. - Dark-mode aware (matches the rest of the site's dark: utility conventions). - Astro check passes cleanly for both files (98 pre-existing repo errors unchanged; none in sponsor.astro or support-ddev.astro). - Full astro build completes successfully and produces dist/sponsor/index.html with all live data baked in (verified locally: ${'$'}9,456 / 78.8% / +${'$'}1,603 week-over-week as of 2026-05-16).
|
🌐 Fork Preview for PR #640 https://pr-640.ddev-com-fork-previews.pages.dev This preview updates automatically when you push changes to your fork. |
|
Quick note on requirement #4 from the issue body — "A top 10 list of our largest monthly recurring sponsors (including clickable logos) with some text to incentivize larger organizations to get on the top 10 list." This isn't currently buildable from This PR ships the closest available approximation: a Featured organizations block (
Happy to add a top-N section here once one of those is decided — option 3 is a one-line change; options 1 and 2 need data-side work. Separately, the rest of the issue's checklist is covered: live progress block with %, $/month, week-over-week delta, source breakdown table, three CTAs (GitHub / PayPal / direct invoice with the 501(c)(3) note), bubble grid at the bottom. Build-time fetch uses an 8s timeout with a typed fallback so the build never breaks on a transient outage; Cloudflare can be set to rebuild daily to roll fresh numbers in. Fork preview rendering live data: https://pr-640.ddev-com-fork-previews.pages.dev/sponsor |
|
I like it! It's another step forward and simplifies all that info. Thanks for working on this! |
… field Closes requirement ddev#4 from issue ddev#631 ("top 10 list of largest monthly recurring sponsors with clickable logos and incentive copy") using the smallest practical extension to the existing hand-curated data. - Add optional `monthlyEquivalent: number` field to featured-sponsors.json entries. Populated for the four current major-tier entries (Upsun, Tag1, i-gelb, IAS) at the $200/month major-tier threshold. - New TopMonthlySponsors.astro component: filters featured-sponsors.json to entries with a confirmed amount, sorts descending, renders top-N with clickable logos + rank + amount. limit defaults to 10. - New "Top monthly sponsors" section on /sponsor, placed above the existing "Featured organizations" grid. The full grid and the all-sponsors bubble grid below it remain unchanged. The component lists only entries with monthlyEquivalent set so the page never shows fabricated amounts; the list grows naturally as the field is populated. A note links readers to featured-sponsors.json so anyone (including sponsors themselves) can submit confirmed amounts via PR.
|
Pushed Wiring on Populated for the four current major-tier entries (Upsun, Tag1, i-gelb, IAS) at the $200/month major-tier threshold. The component lists only entries with This is the option-1 path I mentioned in the previous comment — keeps the data hand-maintained for now but unblocks the requirement so the page can land in this PR. If Preview: https://pr-640.ddev-com-fork-previews.pages.dev/sponsor |
Summary
Adds a new
/sponsorpage focused entirely on financial sponsorship, addressing the requirements in #631 directly:https://ddev.github.io/sponsorship-data/data/all-sponsorships.jsonat build time, with a typed fallback snapshot so the build never breaks on a transient fetch failure.FeaturedSponsorscomponent, no new content infrastructure needed)./support-ddev/moved to the bottom (as suggested in the issue)./foundation.Live progress block
The hero block reads, with current data:
The progress bar uses the existing emerald → cyan gradient palette so it sits inside the site's visual language.
/support-ddev/ — unchanged in scope, points to /sponsor for finance
/support-ddev/opens with a banner directing financial sponsors to/sponsor, and its in-page table of contents entry for "Financial Support" links to/sponsordirectly. The existing financial section on/support-ddev/stays in place so no external links break —/sponsoris the canonical entry going forward, but old bookmarks still work.Daily-data freshness
The data fetch happens at build time, so the page is always accurate as of the last deploy. Cloudflare Pages can be configured with a daily build hook (or webhook triggered by the
sponsorship-datarepo on its daily snapshot commit) to pull the latest snapshot. If real-time freshness becomes important between deploys, a small client-side refresh script can be added as a follow-up — happy to do that in a follow-up PR if useful.Code notes
AGENTS.md— no marketing superlatives.dark:utility conventions.astro checkpasses cleanly for both files; fullastro buildcompletes successfully and producesdist/sponsor/index.htmlwith all live data baked in.Layout,Heading,CtaButton,FeaturedSponsors, andSponsorscomponents.Diff
Closes #631.