The Star History chart on the homepage (apps/web/src/components/star-history-chart.tsx) and in the README renders as a broken image. Upstream cause: api.star-history.com is failing globally — arbitrary repos return 404/500 ("GitHub restricted starred-data access", their tokens are rate-limited; star-history/star-history#548 filed today), and star-history.com itself shows "Your GitHub token is invalid or expired". starchart.cc is also failing (400).
Fix: self-host the chart. A Next route handler (/api/star-history?theme=light|dark) fetches stargazer timestamps from the GitHub API server-side (optional GITHUB_TOKEN, graceful fallback, edge-cached 6h with stale-while-revalidate) and renders the SVG in the site's own ocean palette. Homepage component and README <picture> element point at our own origin — no third party left in the path.
The Star History chart on the homepage (
apps/web/src/components/star-history-chart.tsx) and in the README renders as a broken image. Upstream cause: api.star-history.com is failing globally — arbitrary repos return 404/500 ("GitHub restricted starred-data access", their tokens are rate-limited; star-history/star-history#548 filed today), and star-history.com itself shows "Your GitHub token is invalid or expired". starchart.cc is also failing (400).Fix: self-host the chart. A Next route handler (
/api/star-history?theme=light|dark) fetches stargazer timestamps from the GitHub API server-side (optionalGITHUB_TOKEN, graceful fallback, edge-cached 6h with stale-while-revalidate) and renders the SVG in the site's own ocean palette. Homepage component and README<picture>element point at our own origin — no third party left in the path.