From 99001ca7d51fdea991d619701d40b475de5b2224 Mon Sep 17 00:00:00 2001 From: userquin Date: Wed, 11 Feb 2026 01:43:18 +0100 Subject: [PATCH 01/10] chore: add `vacations` page --- app/pages/vacations.vue | 95 +++++++++++++++++++ nuxt.config.ts | 1 + .../middleware/canonical-redirects.global.ts | 1 + 3 files changed, 97 insertions(+) create mode 100644 app/pages/vacations.vue diff --git a/app/pages/vacations.vue b/app/pages/vacations.vue new file mode 100644 index 000000000..8189d4f4b --- /dev/null +++ b/app/pages/vacations.vue @@ -0,0 +1,95 @@ + + + + + diff --git a/nuxt.config.ts b/nuxt.config.ts index 3311ee081..91bcb503d 100644 --- a/nuxt.config.ts +++ b/nuxt.config.ts @@ -142,6 +142,7 @@ export default defineNuxtConfig({ '/privacy': { prerender: true }, '/search': { isr: false, cache: false }, // never cache '/settings': { prerender: true }, + '/vacations': { prerender: true }, // proxy for insights '/_v/script.js': { proxy: 'https://npmx.dev/_vercel/insights/script.js' }, '/_v/view': { proxy: 'https://npmx.dev/_vercel/insights/view' }, diff --git a/server/middleware/canonical-redirects.global.ts b/server/middleware/canonical-redirects.global.ts index 230ab3443..0e0a3209b 100644 --- a/server/middleware/canonical-redirects.global.ts +++ b/server/middleware/canonical-redirects.global.ts @@ -25,6 +25,7 @@ const pages = [ '/privacy', '/search', '/settings', + '/vacations', ] const cacheControl = 's-maxage=3600, stale-while-revalidate=36000' From d12ea73a45d4e25e2cea7191865aca0dc6718942 Mon Sep 17 00:00:00 2001 From: userquin Date: Thu, 12 Feb 2026 12:10:19 +0100 Subject: [PATCH 02/10] chore: merge vacations page Co-authored-by: Daniel Roe --- app/pages/vacations.vue | 331 ++++++++++++++++++++++++++++++++------- i18n/locales/en.json | 46 ++++++ i18n/schema.json | 138 ++++++++++++++++ lunaria/files/en-GB.json | 46 ++++++ lunaria/files/en-US.json | 46 ++++++ 5 files changed, 551 insertions(+), 56 deletions(-) diff --git a/app/pages/vacations.vue b/app/pages/vacations.vue index 8189d4f4b..7f04fd3c4 100644 --- a/app/pages/vacations.vue +++ b/app/pages/vacations.vue @@ -1,78 +1,297 @@ diff --git a/i18n/locales/en.json b/i18n/locales/en.json index e3e88014e..605a3689a 100644 --- a/i18n/locales/en.json +++ b/i18n/locales/en.json @@ -1109,5 +1109,51 @@ "p1": "If you encounter an accessibility barrier on {app}, please let us know by opening an issue on our {link}. We take these reports seriously and will do our best to address them.", "link": "GitHub repository" } + }, + "vacations": { + "title": "on vacation", + "meta_description": "The npmx team is recharging. Discord reopens in a week.", + "heading": "recharging", + "subtitle": "after {weeks} of intense coding, {contributors}, and over {commits}, the {npmx} team is taking a short break, because it's a marathon, not a sprint.", + "illustration_alt": "a single row of cosy icons", + "poke_log": "Poke the campfire", + "intro": { + "p1": "We've been building npmx at a pace that has cost {some} of us sleep. That's not sustainable – and we don't want it to be the norm. So we're doing something about it: all of us are taking a week off. Together.", + "some": "some", + "all": "all", + "p2": "Go outside. Touch grass – or snow. Finish that book you started before npmx took over your evenings. Visit someone you've been meaning to visit. Do something that has nothing to do with code. We'll all be better for it." + }, + "what": { + "title": "what's happening", + "p1": "Discord is closed {dates}.", + "dates": "February 14 – 21", + "discord": "All invite links are gone and channels are locked – except {garden}, which stays open for folks already there who want to keep hanging out.", + "garden": "#garden", + "site": "npmx.dev is still up. Browse packages as usual.", + "repo": "The repo is open. Issues and PRs are welcome – but expect us to be hands-off until we're back." + }, + "meantime": { + "title": "in the meantime", + "p1": "You're more than welcome to keep poking around while we're away. The codebase is on {repo} – dig in, file issues, open PRs. We'll get to everything when we return.", + "repo_link": "GitHub", + "p2": "Just don't expect a fast review. We'll be somewhere near a cosy fireplace." + }, + "return": { + "title": "see you soon", + "p1": "We'll come back recharged and ready for the final push to March 3rd. Things are going to get even more interesting after that – so let's make sure we're taking care of each other first.", + "p2": "Follow us {social} if you want updates in the meantime.", + "social_link": "on Bluesky", + "add_to_calendar": "remind me when Discord reopens" + }, + "stats": { + "contributors": "Contributors", + "commits": "Commits", + "pr": "PRs Merged", + "subtitle": { + "weeks": "{0} weeks", + "commits": "{0} commits", + "contributors": "{0} contributors" + } + } } } diff --git a/i18n/schema.json b/i18n/schema.json index e2789b11f..52e475288 100644 --- a/i18n/schema.json +++ b/i18n/schema.json @@ -3334,6 +3334,144 @@ }, "additionalProperties": false }, + "vacations": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "meta_description": { + "type": "string" + }, + "heading": { + "type": "string" + }, + "subtitle": { + "type": "string" + }, + "illustration_alt": { + "type": "string" + }, + "poke_log": { + "type": "string" + }, + "intro": { + "type": "object", + "properties": { + "p1": { + "type": "string" + }, + "some": { + "type": "string" + }, + "all": { + "type": "string" + }, + "p2": { + "type": "string" + } + }, + "additionalProperties": false + }, + "what": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "p1": { + "type": "string" + }, + "dates": { + "type": "string" + }, + "discord": { + "type": "string" + }, + "garden": { + "type": "string" + }, + "site": { + "type": "string" + }, + "repo": { + "type": "string" + } + }, + "additionalProperties": false + }, + "meantime": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "p1": { + "type": "string" + }, + "repo_link": { + "type": "string" + }, + "p2": { + "type": "string" + } + }, + "additionalProperties": false + }, + "return": { + "type": "object", + "properties": { + "title": { + "type": "string" + }, + "p1": { + "type": "string" + }, + "p2": { + "type": "string" + }, + "social_link": { + "type": "string" + }, + "add_to_calendar": { + "type": "string" + } + }, + "additionalProperties": false + }, + "stats": { + "type": "object", + "properties": { + "contributors": { + "type": "string" + }, + "commits": { + "type": "string" + }, + "pr": { + "type": "string" + }, + "subtitle": { + "type": "object", + "properties": { + "weeks": { + "type": "string" + }, + "commits": { + "type": "string" + }, + "contributors": { + "type": "string" + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + } + }, + "additionalProperties": false + }, "$schema": { "type": "string" } diff --git a/lunaria/files/en-GB.json b/lunaria/files/en-GB.json index 23e381f04..2c55a95f9 100644 --- a/lunaria/files/en-GB.json +++ b/lunaria/files/en-GB.json @@ -1108,5 +1108,51 @@ "p1": "If you encounter an accessibility barrier on {app}, please let us know by opening an issue on our {link}. We take these reports seriously and will do our best to address them.", "link": "GitHub repository" } + }, + "vacations": { + "title": "on vacation", + "meta_description": "The npmx team is recharging. Discord reopens in a week.", + "heading": "recharging", + "subtitle": "after {weeks} of intense coding, {contributors}, and over {commits}, the {npmx} team is taking a short break, because it's a marathon, not a sprint.", + "illustration_alt": "a single row of cosy icons", + "poke_log": "Poke the campfire", + "intro": { + "p1": "We've been building npmx at a pace that has cost {some} of us sleep. That's not sustainable – and we don't want it to be the norm. So we're doing something about it: all of us are taking a week off. Together.", + "some": "some", + "all": "all", + "p2": "Go outside. Touch grass – or snow. Finish that book you started before npmx took over your evenings. Visit someone you've been meaning to visit. Do something that has nothing to do with code. We'll all be better for it." + }, + "what": { + "title": "what's happening", + "p1": "Discord is closed {dates}.", + "dates": "February 14 – 21", + "discord": "All invite links are gone and channels are locked – except {garden}, which stays open for folks already there who want to keep hanging out.", + "garden": "#garden", + "site": "npmx.dev is still up. Browse packages as usual.", + "repo": "The repo is open. Issues and PRs are welcome – but expect us to be hands-off until we're back." + }, + "meantime": { + "title": "in the meantime", + "p1": "You're more than welcome to keep poking around while we're away. The codebase is on {repo} – dig in, file issues, open PRs. We'll get to everything when we return.", + "repo_link": "GitHub", + "p2": "Just don't expect a fast review. We'll be somewhere near a cosy fireplace." + }, + "return": { + "title": "see you soon", + "p1": "We'll come back recharged and ready for the final push to March 3rd. Things are going to get even more interesting after that – so let's make sure we're taking care of each other first.", + "p2": "Follow us {social} if you want updates in the meantime.", + "social_link": "on Bluesky", + "add_to_calendar": "remind me when Discord reopens" + }, + "stats": { + "contributors": "Contributors", + "commits": "Commits", + "pr": "PRs Merged", + "subtitle": { + "weeks": "{0} weeks", + "commits": "{0} commits", + "contributors": "{0} contributors" + } + } } } diff --git a/lunaria/files/en-US.json b/lunaria/files/en-US.json index 9de51c67d..603b51ad7 100644 --- a/lunaria/files/en-US.json +++ b/lunaria/files/en-US.json @@ -1108,5 +1108,51 @@ "p1": "If you encounter an accessibility barrier on {app}, please let us know by opening an issue on our {link}. We take these reports seriously and will do our best to address them.", "link": "GitHub repository" } + }, + "vacations": { + "title": "on vacation", + "meta_description": "The npmx team is recharging. Discord reopens in a week.", + "heading": "recharging", + "subtitle": "after {weeks} of intense coding, {contributors}, and over {commits}, the {npmx} team is taking a short break, because it's a marathon, not a sprint.", + "illustration_alt": "a single row of cosy icons", + "poke_log": "Poke the campfire", + "intro": { + "p1": "We've been building npmx at a pace that has cost {some} of us sleep. That's not sustainable – and we don't want it to be the norm. So we're doing something about it: all of us are taking a week off. Together.", + "some": "some", + "all": "all", + "p2": "Go outside. Touch grass – or snow. Finish that book you started before npmx took over your evenings. Visit someone you've been meaning to visit. Do something that has nothing to do with code. We'll all be better for it." + }, + "what": { + "title": "what's happening", + "p1": "Discord is closed {dates}.", + "dates": "February 14 – 21", + "discord": "All invite links are gone and channels are locked – except {garden}, which stays open for folks already there who want to keep hanging out.", + "garden": "#garden", + "site": "npmx.dev is still up. Browse packages as usual.", + "repo": "The repo is open. Issues and PRs are welcome – but expect us to be hands-off until we're back." + }, + "meantime": { + "title": "in the meantime", + "p1": "You're more than welcome to keep poking around while we're away. The codebase is on {repo} – dig in, file issues, open PRs. We'll get to everything when we return.", + "repo_link": "GitHub", + "p2": "Just don't expect a fast review. We'll be somewhere near a cosy fireplace." + }, + "return": { + "title": "see you soon", + "p1": "We'll come back recharged and ready for the final push to March 3rd. Things are going to get even more interesting after that – so let's make sure we're taking care of each other first.", + "p2": "Follow us {social} if you want updates in the meantime.", + "social_link": "on Bluesky", + "add_to_calendar": "remind me when Discord reopens" + }, + "stats": { + "contributors": "Contributors", + "commits": "Commits", + "pr": "PRs Merged", + "subtitle": { + "weeks": "{0} weeks", + "commits": "{0} commits", + "contributors": "{0} contributors" + } + } } } From 924c6f2e090fa7aa898914ac4a4dafa309f35f4f Mon Sep 17 00:00:00 2001 From: userquin Date: Thu, 12 Feb 2026 12:34:13 +0100 Subject: [PATCH 03/10] chore: respect `prefers-reduced-motion` for the bouncing hero emoji --- app/pages/vacations.vue | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/app/pages/vacations.vue b/app/pages/vacations.vue index 7f04fd3c4..d3e213a0b 100644 --- a/app/pages/vacations.vue +++ b/app/pages/vacations.vue @@ -300,6 +300,12 @@ const stats = { animation: bounce 3s infinite; } +@media (prefers-reduced-motion: reduce) { + .animate-bounce-slow { + animation: none; + } +} + @keyframes bounce { 0%, 100% { From abb7b989354273b655047970948607a6ef88a58f Mon Sep 17 00:00:00 2001 From: userquin Date: Thu, 12 Feb 2026 12:42:16 +0100 Subject: [PATCH 04/10] chore: apply coderabbitai suggestion --- app/pages/vacations.vue | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/app/pages/vacations.vue b/app/pages/vacations.vue index d3e213a0b..4fae23da4 100644 --- a/app/pages/vacations.vue +++ b/app/pages/vacations.vue @@ -168,7 +168,7 @@ const stats = {