Skip to content

events: serve /events/ from Nuxt - #5785

Merged
ZJvandeWeg merged 9 commits into
mainfrom
nuxt/events
Sep 18, 2026
Merged

ZJvandeWeg merged 9 commits into
mainfrom
nuxt/events

Conversation

@dimitrieh

Copy link
Copy Markdown
Contributor

Description

Moves /events/ to Nuxt: ProveIt 2026 and both Hannover Messe pages.

Their art is now a tracked asset rather than something Eleventy copied at build time.

Related Issue(s)

Part of #5777

Checklist

  • I have read the contribution guidelines
  • I have considered the performance impact of these changes
  • Suitable unit/system level tests have been added and they pass
  • Documentation has been updated
  • For blog PRs, an Art Request has been created (instructions)

@netlify

netlify Bot commented Sep 11, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for flowfuse-website ready!

Name Link
🔨 Latest commit b04e95f
🔍 Latest deploy log https://app.netlify.com/projects/flowfuse-website/deploys/6aada80b68754f00082e674f
😎 Deploy Preview https://deploy-preview-5785--flowfuse-website.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
Lighthouse
Lighthouse
1 paths audited
Performance: 45 (🟢 up 12 from production)
Accessibility: 95 (no change from production)
Best Practices: 92 (no change from production)
SEO: 92 (no change from production)
PWA: -
View the detailed breakdown and full score reports

To edit notification comments on pull requests, go to your Netlify project configuration.

@ZJvandeWeg

Copy link
Copy Markdown
Member

@Yndira-E I recommend we merge this, when @dimitrieh fixed the tests, but then afterwards merge /webinars and /events. Webinars are just virtual events IMO.

@dimitrieh

Copy link
Copy Markdown
Contributor Author

Rebased on main and fixed the failing build.

The prerender 500 on /events/hannover-messe-2026/ was a missing auto-import: the page calls useScrollToAnchor(), and nuxt/composables/useScrollToAnchor.ts only exists on the /use-cases/ branch. Nuxt auto-imports mean there is no import line to break, so it compiles and throws at prerender. The composable is carried here too, byte-identical to the copy in #5780, so whichever lands first the other merges cleanly.

From the review pass over the whole migration:

  • Adding /events to NUXT_PREFIXES stopped src/events/images/** and /events/hm25-invite.ics resolving in dev: those only reach nuxt/public/ through the 11ty passthrough in a production build. Added a carve-out beside the two this file already has for /resources/images/ and the blog and changelog image paths. Production was never affected.
  • A header comment on hannover-messe-2025.vue still described rich-text.mjs escaping the copy strings. It is gone, and the strings are page-local consts rendered with v-html; the comment said so.

nuxt/lib/rich-text.mjs is dropped and scripts/gen-site-art.py is now scripts/gen-site-art.mjs, both per the review on #5784.

On merging /webinars and /events: agreed they are the same thing. Worth doing as its own change once both are on Nuxt, since it is an IA decision with redirects attached rather than part of the port.

@dimitrieh

Copy link
Copy Markdown
Contributor Author

Rebased onto main. The conflicts in nuxt/server/middleware/legacy.ts and nuxt/nuxt.config.ts are resolved and CI is green.

3 routes move off 11ty. These are three one-off pages on layouts/base.njk, which
added only the header and footer, so each stays its own page with its former
frontmatter as local data.

The three "book a demo" buttons were hand-written ff-btn links to /book-demo and
fired no event; they are <CtaBookDemo> now, so they carry the registry's copy
and tracking. The two in-page jump links used an inline onclick calling
scrollIntoView and go through useScrollToAnchor, the same helper the pages that
included smooth-scroll.njk use.

/events/hannover-messe-2025/ had two <h3>s closed with a stray </span>, and a
heading using </br>, which is not a tag; the markup is well-formed here.

Verified all 3 against production. The only differences are the demo buttons'
label and href, which now come from the CTA registry ("Book a Demo",
uppercased by CSS, and a trailing slash) rather than being typed per page.
@dimitrieh

Copy link
Copy Markdown
Contributor Author

Rebased onto main. The conflicts in nuxt/server/middleware/legacy.ts and nuxt/nuxt.config.ts are resolved and CI is green.

@dimitrieh

Copy link
Copy Markdown
Contributor Author

Nothing to change here, one note. /events was never added to NUXT_PREFIXES in nuxt/server/middleware/legacy.ts, so npm run dev keeps proxying it to 11ty and serves the old page. That middleware returns early unless NODE_ENV === 'development', which is why CI and the deploy preview both look correct and this went unnoticed.

It was flagged on three of these PRs and is actually missing on eight, so it is fixed in one place in #5815 rather than eight conflicting edits to the same file. Merge that one after this, since registering a section before its pages land points dev at a Nuxt route that does not exist yet.

Without the prefix the dev middleware keeps proxying to 11ty, so npm run dev
shows the old page. The middleware returns early unless NODE_ENV is development,
which is why CI and the deploy preview both looked correct.

The event images and the Hannover .ics stay in src/ and only reach nuxt/public
through the 11ty passthrough in a production build, so dev needs the carve-out
/resources and /vs already have.
@dimitrieh

Copy link
Copy Markdown
Contributor Author

Correction to my earlier comment: #5815 is closed, the registration belongs in each migration PR instead. Pushed here. It also carries the carve-out for /events/images/ and the Hannover .ics, which stay in src/.

The three glyphs are stock Heroicons, so they go through <UIcon> and SiteArt.vue,
siteArt.ts and gen-site-art.mjs come out. Each call site carries its own size:
UIcon renders a mask span with no intrinsic ratio, so a width-only wrapper would
have collapsed it.

Both anchors already carry the href they scrolled to, so the handler only had to
preventDefault to do what the browser does anyway. The site-wide
scroll-behavior: smooth animates the jump, which retires the composable.
@dimitrieh

Copy link
Copy Markdown
Contributor Author

Took the cross-PR pass over the four patterns here. Three of them applied:

  • Custom icon files. arrow-small-down, calendar and arrow-top-right-on-square are stock Heroicons, so they are <UIcon> now and SiteArt.vue, siteArt.ts and gen-site-art.mjs are gone. Each call site carries its own size: UIcon renders a mask span with no intrinsic ratio, so the two width-only wrappers (<div class="w-5">) would have collapsed it.
  • useScrollToAnchor. Both anchors already carry the href they scrolled to (#special-sessions, and secondaryCtaTarget is #flowfuse-talks-agenda), so the handler only preventDefault'd to do what the browser does anyway. Removed, the global scroll-behavior: smooth animates it.
  • legacy.ts. /events registered, plus the carve-out for /events/images/ and hm25-invite.ics, which stay in src/ and only reach nuxt/public via the passthrough in a production build.

Leftover 11ty layouts: none here. Checked which layouts this branch makes dead relative to main rather than which are dead on it, since blueprint, common-js, mql-contact and toc already have no consumers on main and are not this PR's to remove.

Worth a look on the preview: arrow-small-down is the 20x20 solid Heroicon (-20-solid), not the 24 outline, so it is the mini glyph.

@dimitrieh dimitrieh mentioned this pull request Sep 16, 2026
5 tasks
# Conflicts:
#	nuxt/nuxt.config.ts
#	nuxt/server/middleware/legacy.ts
@dimitrieh

Copy link
Copy Markdown
Contributor Author

Conflicts resolved, main is merged in. Same shape as the other migration PRs: the registry files take the union, so NUXT_PREFIXES and the prerender list keep both sides and this PR's own route drops out of the "still on 11ty" comment.

# Conflicts:
#	nuxt/server/middleware/legacy.ts
dimitrieh and others added 3 commits September 17, 2026 12:11
@ZJvandeWeg
ZJvandeWeg enabled auto-merge (squash) September 18, 2026 21:07
@ZJvandeWeg
ZJvandeWeg merged commit 056ea30 into main Sep 18, 2026
7 checks passed
@ZJvandeWeg
ZJvandeWeg deleted the nuxt/events branch September 18, 2026 21:13
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