Skip to content

feat: sponsors#2967

Merged
alexdln merged 10 commits into
npmx-dev:mainfrom
alexdln:feat/sponsors
Jul 2, 2026
Merged

feat: sponsors#2967
alexdln merged 10 commits into
npmx-dev:mainfrom
alexdln:feat/sponsors

Conversation

@alexdln

@alexdln alexdln commented Jun 27, 2026

Copy link
Copy Markdown
Member

🧭 Context

A dedicated page for sponsors. This is useful for both current sponsors and those just considering it. It's a public and always-open source of important information

@vercel

vercel Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
npmx.dev Ready Ready Preview, Comment Jul 2, 2026 8:52pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
docs.npmx.dev Ignored Ignored Preview Jul 2, 2026 8:52pm
npmx-lunaria Ignored Ignored Jul 2, 2026 8:52pm

Request Review

@coderabbitai

coderabbitai Bot commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: d411fcbb-50be-4200-8115-2f8bfac8bd12

📥 Commits

Reviewing files that changed from the base of the PR and between 508cbf7 and 04f76ed.

📒 Files selected for processing (1)
  • i18n/locales/en.json
🚧 Files skipped from review as they are similar to previous changes (1)
  • i18n/locales/en.json

📝 Walkthrough

Summary by CodeRabbit

  • New Features
    • Added a new Sponsors page with sponsorship tier pricing, tier details, and SEO/preview metadata.
    • Added a Sponsors link to the footer and a global command palette entry for fast navigation.
    • Added a Sponsors call-to-action on the About page.
  • Bug Fixes
    • Updated routing rules so /sponsors is correctly handled, including canonical redirect behaviour and improved reliability of opening the page.

Walkthrough

A new /sponsors page is added and prerendered. The PR adds sponsors-specific translations and schema, renders the page with pricing and supporting content, and wires the route into the footer, command palette, about page, and redirect handling.

Changes

Sponsors Page

Layer / File(s) Summary
i18n translations and schema
i18n/locales/en.json, i18n/schema.json
Adds footer.sponsors and a new sponsors_page translation structure, plus matching schema entries for the page copy and tier names.
sponsors.vue page component
app/pages/sponsors.vue
Adds the new page component with tier pricing helpers, translated SEO metadata, page layout, logo lists, stat cards, tier cards, a footnote, and responsive styles.
Routing, prerender rule, and redirect allowlist
nuxt.config.ts, server/middleware/canonical-redirects.global.ts
Adds /sponsors to prerender routing and the canonical redirect allowlist.
Footer, command palette, and about CTA
app/components/AppFooter.vue, app/composables/useCommandPaletteGlobalCommands.ts, app/pages/about.vue
Adds a Sponsors footer link, a command palette entry, and a linked CTA in the about page.

Possibly related PRs

  • npmx-dev/npmx.dev#2966: Also touches the sponsor-related footer and about-page navigation used by this change.

Suggested reviewers: ghostdevv

🚥 Pre-merge checks | ✅ 4
✅ Passed checks (4 passed)
Check name Status Explanation
Title check ✅ Passed The title is concise and directly refers to the sponsors-focused change introduced by this PR.
Description check ✅ Passed The description matches the PR objective by describing a dedicated public sponsors page for current and prospective sponsors.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@github-actions

github-actions Bot commented Jun 27, 2026

Copy link
Copy Markdown

Lunaria Status Overview

🌕 This pull request will trigger status changes.

Learn more

By default, every PR changing files present in the Lunaria configuration's files property will be considered and trigger status changes accordingly.

You can change this by adding one of the keywords present in the ignoreKeywords property in your Lunaria configuration file in the PR's title (ignoring all files) or by including a tracker directive in the merged commit's description.

Tracked Files

File Note
i18n/locales/en.json Source changed, localizations will be marked as outdated.
Warnings reference
Icon Description
🔄️ The source for this localization has been updated since the creation of this pull request, make sure all changes in the source have been applied.

@codecov

codecov Bot commented Jun 27, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ All tests successful. No failed tests found.

📢 Thoughts on this report? Let us know!

Comment thread i18n/locales/en.json Outdated
Comment thread i18n/locales/en.json Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🧹 Nitpick comments (1)
app/pages/sponsors.vue (1)

9-17: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Use the page-level $t() convention throughout <script setup>.

This file already uses $t() for SEO and OG metadata, and the repo guidance for app/pages/*.vue is to use the Nuxt i18n globals directly instead of destructuring t from useI18n(). Keeping one access pattern here will make follow-up edits cleaner.

Suggested tidy-up
-const { t } = useI18n()
 const currencyFormatter = useNumberFormatter({
   style: 'currency',
   currency: 'USD',
   maximumFractionDigits: 0,
 })
 
 function formatTierPrice(amount: number) {
-  return `${currencyFormatter.value.format(amount)}${t('sponsors_page.tiers.per_month')}`
+  return `${currencyFormatter.value.format(amount)}${$t('sponsors_page.tiers.per_month')}`
 }
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@app/pages/sponsors.vue` around lines 9 - 17, The script setup in the sponsors
page mixes direct page-level i18n usage with a destructured t from useI18n();
update it to follow the app/pages/*.vue convention by removing the useI18n()
destructuring and using the Nuxt global $t() consistently in formatTierPrice and
any other script-side translations, matching the existing SEO/OG metadata style.

Source: Learnings

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@app/pages/sponsors.vue`:
- Around line 91-145: The headline metrics in sponsors.vue are hardcoded
numerals, so they bypass locale formatting and won’t adapt on translated pages.
Update the metric blocks in the sponsors page template to use the existing
number formatting approach already used elsewhere (such as the
`useNumberFormatter`/`$n()` pattern), and keep the `+` suffix separate from the
formatted number. Focus on the static values in the section cards (`250`, `700`,
`200000`, `3400`) and preserve the current labels and layout.

---

Nitpick comments:
In `@app/pages/sponsors.vue`:
- Around line 9-17: The script setup in the sponsors page mixes direct
page-level i18n usage with a destructured t from useI18n(); update it to follow
the app/pages/*.vue convention by removing the useI18n() destructuring and using
the Nuxt global $t() consistently in formatTierPrice and any other script-side
translations, matching the existing SEO/OG metadata style.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

Run ID: 1669dad4-4f5e-4004-918b-9144b0eb1dfa

📥 Commits

Reviewing files that changed from the base of the PR and between d9e016f and 508cbf7.

📒 Files selected for processing (8)
  • app/components/AppFooter.vue
  • app/composables/useCommandPaletteGlobalCommands.ts
  • app/pages/about.vue
  • app/pages/sponsors.vue
  • i18n/locales/en.json
  • i18n/schema.json
  • nuxt.config.ts
  • server/middleware/canonical-redirects.global.ts

Comment thread app/pages/sponsors.vue
Comment thread i18n/locales/en.json Outdated
Co-authored-by: patak <583075+patak-cat@users.noreply.github.com>
@alexdln alexdln added this pull request to the merge queue Jul 2, 2026
Merged via the queue into npmx-dev:main with commit 161697c Jul 2, 2026
23 of 24 checks passed
@alexdln alexdln deleted the feat/sponsors branch July 2, 2026 21:35
@github-actions github-actions Bot mentioned this pull request Jul 2, 2026
fengmk2 pushed a commit to fengmk2/npmx.dev that referenced this pull request Jul 3, 2026
Co-authored-by: patak <583075+patak-cat@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants