Skip to content

Comments

feat: add /recharging page#1363

Merged
danielroe merged 15 commits intonpmx-dev:mainfrom
userquin:chore-add-vacations-page
Feb 12, 2026
Merged

feat: add /recharging page#1363
danielroe merged 15 commits intonpmx-dev:mainfrom
userquin:chore-add-vacations-page

Conversation

@userquin
Copy link
Member

@userquin userquin commented Feb 11, 2026

#1356
closes #1362

@vercel
Copy link

vercel bot commented Feb 11, 2026

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

Project Deployment Actions Updated (UTC)
npmx.dev Ready Ready Preview, Comment Feb 12, 2026 5:45pm
2 Skipped Deployments
Project Deployment Actions Updated (UTC)
docs.npmx.dev Ignored Ignored Preview Feb 12, 2026 5:45pm
npmx-lunaria Ignored Ignored Feb 12, 2026 5:45pm

Request Review

@coderabbitai
Copy link
Contributor

coderabbitai bot commented Feb 11, 2026

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Adds a new Vue page at app/pages/vacations.vue (script setup, TypeScript) providing a localized vacations/maintenance page with stats, decorative icon banner, an interactive fireplace easter egg, and an ICS calendar download. Nuxt routeRules now prerender /vacations and canonical-redirects middleware exempts it. New i18n keys and schema entries plus lunaria locale files (en-GB, en-US) were added.

Possibly related PRs

Suggested reviewers

  • danielroe
  • mrcego
🚥 Pre-merge checks | ✅ 1
✅ Passed checks (1 passed)
Check name Status Explanation
Description check ✅ Passed The pull request description references issue #1356 and closes #1362, which directly relates to the changeset adding a vacations page.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

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

@codecov
Copy link

codecov bot commented Feb 11, 2026

Codecov Report

❌ Patch coverage is 91.89189% with 3 lines in your changes missing coverage. Please review.
✅ All tests successful. No failed tests found.

Files with missing lines Patch % Lines
app/components/BlueskyPostEmbed.client.vue 91.89% 3 Missing ⚠️

📢 Thoughts on this report? Let us know!

@github-actions
Copy link

github-actions bot commented Feb 12, 2026

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
lunaria/files/en-GB.json Localization changed, will be marked as complete. 🔄️
lunaria/files/en-US.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.

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

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 (4)
i18n/locales/en.json (1)

1112-1158: Consider making the copy less time-relative to avoid future staleness.

meta_description (“reopens in a week”) and what.dates (“February 14 – 21”) will read oddly after Feb 2026. If this page might live beyond this specific window, consider including the year and/or using an absolute reopen date (e.g., “Discord reopens February 22, 2026”).

app/pages/vacations.vue (3)

111-119: Remove per-button focus-visible:* utilities and rely on the global focus-visible rule.

Both buttons add focus-visible:outline-accent/70, which conflicts with the repo’s “global focus ring” approach for button/select.

Proposed diff
-            class="cursor-pointer inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded focus-visible:outline-accent/70 shrink-0"
+            class="cursor-pointer inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded shrink-0"
...
-              class="relative shrink-0 cursor-pointer rounded transition-transform duration-200 hover:scale-110 focus-visible:outline-accent/70 w-5 h-5 sm:w-6 sm:h-6"
+              class="relative shrink-0 cursor-pointer rounded transition-transform duration-200 hover:scale-110 w-5 h-5 sm:w-6 sm:h-6"

Based on learnings “focus-visible styling for button and select elements is implemented globally … Do not apply per-element inline utility classes like focus-visible:outline-accent/70 … rely on the global rule.”

Also applies to: 176-190


47-86: Make the .ics download more robust (revoke timing + calendar fields).

URL.revokeObjectURL(url) immediately after a.click() can be flaky in some browsers. Also, adding DTSTAMP improves compatibility with calendar clients.

Proposed diff
   const ics = [
     'BEGIN:VCALENDAR',
     'VERSION:2.0',
     'PRODID:-//npmx//vacations//EN',
     'BEGIN:VEVENT',
+    `DTSTAMP:${fmt(new Date())}`,
     `DTSTART:${fmt(start)}`,
     `DTEND:${fmt(end)}`,
     `SUMMARY:npmx Discord is back!`,
     `DESCRIPTION:The npmx team is back from vacation. Time to rejoin! https://chat.npmx.dev`,
     'STATUS:CONFIRMED',
     `UID:${uid}`,
     'END:VEVENT',
     'END:VCALENDAR',
   ].join('\r\n')

   const blob = new Blob([ics], { type: 'text/calendar;charset=utf-8' })
   const url = URL.createObjectURL(blob)
   const a = document.createElement('a')
   a.href = url
   a.download = 'npmx-discord-reminder.ics'
   a.click()
-  URL.revokeObjectURL(url)
+  // Let the browser start the download before revoking.
+  setTimeout(() => URL.revokeObjectURL(url), 0)
 }

Verification suggestion: import the generated file into at least Apple Calendar + Google Calendar to confirm it’s accepted as intended.


104-105: Respect prefers-reduced-motion for the bouncing hero emoji.

This animation runs unconditionally; adding a reduced-motion guard keeps the page aligned with accessibility expectations.

Proposed diff
 .animate-bounce-slow {
   animation: bounce 3s infinite;
 }
 
+@media (prefers-reduced-motion: reduce) {
+  .animate-bounce-slow {
+    animation: none;
+  }
+}
+
 `@keyframes` bounce {

Also applies to: 298-314

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Comment on lines +111 to +119
<button
type="button"
class="cursor-pointer inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded focus-visible:outline-accent/70 shrink-0"
@click="router.back()"
v-if="canGoBack"
>
<span class="i-carbon:arrow-left rtl-flip w-4 h-4" aria-hidden="true" />
<span class="sr-only sm:not-sr-only">{{ $t('nav.back') }}</span>
</button>
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Remove per-button focus-visible utility classes.

These buttons should rely on the global focus-visible styling rather than inline utilities.

🧹 Suggested diff
-            class="cursor-pointer inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded focus-visible:outline-accent/70 shrink-0"
+            class="cursor-pointer inline-flex items-center gap-2 font-mono text-sm text-fg-muted hover:text-fg transition-colors duration-200 rounded shrink-0"
...
-              class="relative shrink-0 cursor-pointer rounded transition-transform duration-200 hover:scale-110 focus-visible:outline-accent/70 w-5 h-5 sm:w-6 sm:h-6"
+              class="relative shrink-0 cursor-pointer rounded transition-transform duration-200 hover:scale-110 w-5 h-5 sm:w-6 sm:h-6"

Based on learnings: In the npmx.dev project, focus-visible styling for button and select elements is implemented globally in app/assets/main.css with the rule: button:focus-visible, select:focus-visible { outline: 2px solid var(--accent); outline-offset: 2px; border-radius: 4px; }. Do not apply per-element inline utility classes like focus-visible:outline-accent/70 on these elements in Vue templates or components.

Also applies to: 176-179

Copy link
Contributor

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 1

Comment on lines 64 to 77
const ics = [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'PRODID:-//npmx//vacations//EN',
'BEGIN:VEVENT',
`DTSTART:${fmt(start)}`,
`DTEND:${fmt(end)}`,
`SUMMARY:npmx Discord is back!`,
`DESCRIPTION:The npmx team is back from vacation. Time to rejoin! https://chat.npmx.dev`,
'STATUS:CONFIRMED',
`UID:${uid}`,
'END:VEVENT',
'END:VCALENDAR',
].join('\r\n')
Copy link
Contributor

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

Consider adding DTSTAMP for ICS spec compliance.

Per RFC 5545, DTSTAMP is a required property for VEVENT. While most calendar apps are lenient, some strict parsers may reject the file without it.

🛠️ Suggested fix
   const ics = [
     'BEGIN:VCALENDAR',
     'VERSION:2.0',
     'PRODID:-//npmx//vacations//EN',
     'BEGIN:VEVENT',
+    `DTSTAMP:${fmt(new Date())}`,
     `DTSTART:${fmt(start)}`,
     `DTEND:${fmt(end)}`,
     `SUMMARY:npmx Discord is back!`,
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
const ics = [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'PRODID:-//npmx//vacations//EN',
'BEGIN:VEVENT',
`DTSTART:${fmt(start)}`,
`DTEND:${fmt(end)}`,
`SUMMARY:npmx Discord is back!`,
`DESCRIPTION:The npmx team is back from vacation. Time to rejoin! https://chat.npmx.dev`,
'STATUS:CONFIRMED',
`UID:${uid}`,
'END:VEVENT',
'END:VCALENDAR',
].join('\r\n')
const ics = [
'BEGIN:VCALENDAR',
'VERSION:2.0',
'PRODID:-//npmx//vacations//EN',
'BEGIN:VEVENT',
`DTSTAMP:${fmt(new Date())}`,
`DTSTART:${fmt(start)}`,
`DTEND:${fmt(end)}`,
`SUMMARY:npmx Discord is back!`,
`DESCRIPTION:The npmx team is back from vacation. Time to rejoin! https://chat.npmx.dev`,
'STATUS:CONFIRMED',
`UID:${uid}`,
'END:VEVENT',
'END:VCALENDAR',
].join('\r\n')

Copy link
Contributor

@ghostdevv ghostdevv left a comment

Choose a reason for hiding this comment

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

LGTM, won't merge yet as not sure if I should yet?

@danielroe danielroe self-requested a review February 12, 2026 16:15
@danielroe danielroe changed the title chore: add vacations page feat: add /vacations page Feb 12, 2026
@danielroe danielroe changed the title feat: add /vacations page feat: add /holiday page Feb 12, 2026
@danielroe danielroe changed the title feat: add /holiday page feat: add /recharging page Feb 12, 2026
@danielroe danielroe added this pull request to the merge queue Feb 12, 2026
Merged via the queue into npmx-dev:main with commit e5f60f6 Feb 12, 2026
17 checks passed
@userquin userquin deleted the chore-add-vacations-page branch February 12, 2026 18:29
@coderabbitai coderabbitai bot mentioned this pull request Feb 22, 2026
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.

3 participants