Epic — Rework /integrations/ and retire /certified-nodes/
Summary
Two pages do overlapping jobs, both poorly:
/certified-nodes/ — sales list, hidden from nav (Google-only discovery), every card links out to flows.nodered.org.
/integrations/ — richer catalog with search, filters, generated detail pages. Loads in ~25s sometimes.
/integrations/ already has the pieces to absorb the certified content (ffCertified flag, certified filter, certified-first sort, certified badge). This epic folds the two together, kills /certified-nodes/, and rebuilds the detail page to serve both buyer personas.
Goals — two audiences, one page
The page must serve two distinct users:
- Economical buyer (budget holder). Doesn't know what they're buying, but needs to say yes. Story they need: "FlowFuse connects with a lot of things, and the things that matter are certified and supported." → index page's job.
- Technical buyer (Node-RED developer / end user). Needs precise docs: install, usage, examples, version, support. → detail page's job.
What that translates to:
Why we self-host docs
FlowFuse forks public Node-RED nodes into a private npm registry under a FlowFuse-controlled scope (e.g. @flowfuse-certified/<name>). Why fork: to ship CVE/security fixes on our own timeline instead of waiting on upstream maintainers. We push fixes back upstream when we can.
Consequence: our packages diverge from upstream over time, so customers need docs that reflect our version. Some nodes are also proprietary (e.g. OPC UA) — no public upstream exists, so our page IS the documentation. Any divergence from upstream must be visibly flagged on the page.
Phased plan
The phases are sequenced so that each one ships value on its own and de-risks the next. Phases 1–4 are the critical path requested on the call; Phase 5 is the follow-up.
| # |
Phase |
What it does |
| 1 |
Merge certified nodes into /integrations/ |
Surface the certified filter, add an intro/hero, badge tile cards. |
| 2 |
Retire /certified-nodes/ |
301 redirect to a pre-filtered /integrations/. Delete the page and its redundant data fetch. |
| 3 |
Rework the install box |
Remove npm install. Add a palette-manager GIF + reduced-motion fallback. |
| 4 |
Migrate /integrations/ to Nuxt |
Port catalog + detail pages. Fix the ~25s load while porting. |
| 5 |
Documentation parity & FF-authored docs |
Audit docs, build the overlay + divergence-callout pattern, prove it with OPC UA. |
Epic — Rework /integrations/ and retire /certified-nodes/
Summary
Two pages do overlapping jobs, both poorly:
/certified-nodes/— sales list, hidden from nav (Google-only discovery), every card links out to flows.nodered.org./integrations/— richer catalog with search, filters, generated detail pages. Loads in ~25s sometimes./integrations/already has the pieces to absorb the certified content (ffCertifiedflag, certified filter, certified-first sort, certified badge). This epic folds the two together, kills/certified-nodes/, and rebuilds the detail page to serve both buyer personas.Goals — two audiences, one page
The page must serve two distinct users:
What that translates to:
/integrations/becomes the only place.npm installfrom the install box. FlowFuse customers don't have npm access from inside the platform; replace with a palette manager GIF.OPC UAhas no public docs — our page IS the docs. Flag any divergence from upstream.Why we self-host docs
FlowFuse forks public Node-RED nodes into a private npm registry under a FlowFuse-controlled scope (e.g.
@flowfuse-certified/<name>). Why fork: to ship CVE/security fixes on our own timeline instead of waiting on upstream maintainers. We push fixes back upstream when we can.Consequence: our packages diverge from upstream over time, so customers need docs that reflect our version. Some nodes are also proprietary (e.g.
OPC UA) — no public upstream exists, so our page IS the documentation. Any divergence from upstream must be visibly flagged on the page.Phased plan
The phases are sequenced so that each one ships value on its own and de-risks the next. Phases 1–4 are the critical path requested on the call; Phase 5 is the follow-up.
/integrations//certified-nodes//integrations/. Delete the page and its redundant data fetch.npm install. Add a palette-manager GIF + reduced-motion fallback./integrations/to Nuxt