Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
90 commits
Select commit Hold shift + click to select a range
fad6354
Add 11ty→Nuxt route-parity verification harness
dimitrieh May 26, 2026
66b02d5
Freeze 11ty route baseline as immutable migration reference
dimitrieh May 26, 2026
e5a327c
Add baseline route-diff proof: 0 dropped URLs
dimitrieh May 26, 2026
80aa80a
Add Vite allowedHosts for sprite preview; document migration status
dimitrieh May 26, 2026
621c185
Migrate handbook to native Nuxt Content (166 pages, URLs preserved)
dimitrieh May 26, 2026
40c99d8
Document handbook migration to native Nuxt Content in status
dimitrieh May 26, 2026
919bfba
Add verification record for handbook migration increment
dimitrieh May 26, 2026
c0992d0
Stop 11ty building the 166 migrated handbook pages
dimitrieh May 26, 2026
3f3d063
Document handbook now removed from 11ty build
dimitrieh May 26, 2026
1dae631
Migrate changelog cluster to native Nuxt (180 routes, removed from 11ty)
dimitrieh May 26, 2026
a474f48
Document changelog migration in status
dimitrieh May 26, 2026
2790661
Render customer-stories via native Nuxt (11 routes)
dimitrieh May 27, 2026
a0d03a0
Document customer-stories migration in status
dimitrieh May 27, 2026
6587476
Add verified RenderFlow MDC component for Node-RED flow widgets
dimitrieh May 27, 2026
709d256
Document verified RenderFlow infrastructure as flow-widget unblocker
dimitrieh May 27, 2026
cfb08f1
Migrate webinars + AMAs to native Nuxt Content (43 routes)
dimitrieh May 27, 2026
4fbcbf6
Document webinars + AMAs migration in status
dimitrieh May 27, 2026
12af067
Migrate ebooks to native Nuxt Content (2 routes)
dimitrieh May 27, 2026
d6751ef
Document ebooks migration and detailed remaining-scope breakdown
dimitrieh May 27, 2026
e8fdbec
Migrate solutions/{scada,uns,edge-connectivity} to native Nuxt (3 rou…
dimitrieh May 27, 2026
8d5b867
Complete solutions cluster migration to native Nuxt (6 routes)
dimitrieh May 27, 2026
ea0a596
Document solutions cluster migration in status
dimitrieh May 27, 2026
64ae67b
Migrate vs cluster (kepware, litmus) to native Nuxt (2 routes)
dimitrieh May 27, 2026
e782d0f
Migrate whitepaper cluster to native Nuxt (3 gated pages)
dimitrieh May 27, 2026
24a4754
Migrate jobs cluster to native Nuxt (3 redirect pages)
dimitrieh May 27, 2026
bc55970
Document vs, whitepaper, jobs migrations in status
dimitrieh May 27, 2026
bc18302
Migrate partners cluster to native Nuxt (4 routes) + reusable Icon co…
dimitrieh May 27, 2026
50e9ebd
Migrate 6 single marketing pages to native Nuxt
dimitrieh May 27, 2026
bbd7521
Migrate education + professional-services pages to native Nuxt
dimitrieh May 27, 2026
4af1307
Migrate support (Help Center) page to native Nuxt
dimitrieh May 27, 2026
7e4ed49
Migrate resources/publications + pricing/request-quote to native Nuxt
dimitrieh May 27, 2026
10207f3
Update migration status: single pages + publications/request-quote (7…
dimitrieh May 27, 2026
4d2766e
Migrate about page to native Nuxt (team grid + values + investors)
dimitrieh May 27, 2026
28c05ae
Document blog as the keystone dependency for remaining marketing pages
dimitrieh May 27, 2026
fd43eb6
Migrate 3 landing-comparison pages to native Nuxt
dimitrieh May 27, 2026
20ab3ca
Migrate 4 abm-landing pages to native Nuxt (AbmLanding + Testimonials…
dimitrieh May 27, 2026
2f7c084
Migrate /docs to native @nuxt/content (109 pages, 11 redirects)
dimitrieh May 27, 2026
fc5ed57
Document docs migration complete + build-timing notes in status
dimitrieh May 27, 2026
e13412b
Migrate events/proveit-2026 to native Nuxt (faithful 1:1 reproduction)
dimitrieh May 27, 2026
b5fe3fb
Document proveit-2026 migration + remaining events in status
dimitrieh May 27, 2026
b7eedbc
Migrate events/hannover-messe 2025+2026 to native Nuxt (clears events…
dimitrieh May 27, 2026
408215c
Document events cluster fully migrated in status
dimitrieh May 27, 2026
f28bc10
Migrate blog cluster (429 routes) to native Nuxt @nuxt/content
dimitrieh May 27, 2026
090a140
Migrate homepage (/) to native Nuxt
dimitrieh May 27, 2026
bb643cf
Migrate platform pages (dashboard, device-agent, features, why-flowfu…
dimitrieh May 27, 2026
34f408e
Migrate remaining landing pages + community/newsletter to native Nuxt
dimitrieh May 27, 2026
353670c
Update migration status: blog, homepage, platform, landing, newslette…
dimitrieh May 27, 2026
d283710
Migrate node-red cluster to native Nuxt @nuxt/content
dimitrieh May 28, 2026
af24682
Migrate integrations cluster to native Nuxt
dimitrieh May 28, 2026
07809eb
Harden integrations author.url against javascript: URI bypass
dimitrieh May 28, 2026
17bb28a
Wire integrations/node-red/thank-you into build, proxy, and prerender
dimitrieh May 28, 2026
5bc7349
Migrate final 11ty-only pages to native Nuxt; fix integrations scoped…
dimitrieh May 28, 2026
de8f6f3
Replace 11ty passthrough with native Nuxt asset + sitemap build steps
dimitrieh May 28, 2026
f4292c8
Make Nuxt generate the production build; drop 11ty build steps and deps
dimitrieh May 28, 2026
fee7d49
Remove Eleventy: delete .eleventy.js, lib/, src/ templating, and the …
dimitrieh May 28, 2026
4e2a2cb
Fix integration detail pages 404ing on client after hydration
dimitrieh May 28, 2026
b9da2db
Record 11ty removal / migration completion in STATUS.md
dimitrieh May 28, 2026
6e87003
Update codebase guide: Nuxt-only stack, drop stale 11ty references
dimitrieh May 28, 2026
4138068
Drop unused @11ty/eleventy-img dependency
dimitrieh May 28, 2026
ec0dade
Fix broken relative content images via build-time normalization
dimitrieh May 28, 2026
30f9221
Fix Tailwind purge dropping Nuxt component CSS
dimitrieh May 28, 2026
c916cf4
Add smoke-sweep script and record final verification
dimitrieh May 28, 2026
d064991
Port upstream homepage hero redesign + metrics to Nuxt
dimitrieh May 28, 2026
38c37cf
Port upstream blog TL;DR block, author titles, and PLC/MQTT/OPC UA/Mo…
dimitrieh May 28, 2026
fb2c2eb
Fix responsive layout for docs/handbook, images, and blog card paths
dimitrieh May 28, 2026
7a1d6f3
Fix docs/handbook content overflow and restore docs landing tiles
dimitrieh May 28, 2026
aa66303
Stop legacy .handbook container from overflowing docs/handbook on mob…
dimitrieh May 28, 2026
7f9cd1f
Stop docs-index tile HTML from mis-parsing into stray code blocks
dimitrieh May 28, 2026
69a5c3d
Regenerate blog/node-red content from origin/main integration
dimitrieh May 28, 2026
4452ee8
Add responsive sweep script and record integration + responsive verif…
dimitrieh May 28, 2026
e79fd1b
Fix Netlify dev command for Nuxt-only stack
dimitrieh May 29, 2026
df89b98
Remove sprite-specific paths from config and QA scripts
dimitrieh May 29, 2026
2dea0cb
Update docs for the Nuxt-only stack and add PR description
dimitrieh May 29, 2026
2558d55
Record final verification and add PR-ready summary to migration docs
dimitrieh May 29, 2026
c40620e
Fix CI build: leave root-relative <img src> paths to runtime
dimitrieh May 29, 2026
ddfc950
Always copy raw images in copy_assets.js (restore 11ty semantic)
dimitrieh May 29, 2026
d02675e
Tolerate CRLF in redirects frontmatter delimiter
dimitrieh May 29, 2026
7b82850
Match 11ty heading-id slugs in @nuxt/content (dimension: slugger)
dimitrieh May 29, 2026
b655fa0
Strip .md/README from internal links in @nuxt/content (dimension: int…
dimitrieh May 29, 2026
15ca8d1
Resolve blog relative links against the post URL (dimension: relative…
dimitrieh May 29, 2026
f0a5280
Add post-build anchor repair (dimension: anchor repair)
dimitrieh May 29, 2026
2345f9d
Register markdown rehype plugins via nuxt.config; honor {#custom-id} …
dimitrieh May 29, 2026
12f34c5
Resolve relative links in handbook/docs/node-red against the source dir
dimitrieh May 29, 2026
e8969c7
Skip URI-scheme targets when resolving blog relative links
dimitrieh May 29, 2026
94994d1
Serve relative downloadable assets beside webinar content
dimitrieh May 29, 2026
8a7add2
Decode percent-encoded fragments in anchor repair
dimitrieh May 29, 2026
d620625
Don't emit hidden pagination Prev/Next links
dimitrieh May 29, 2026
878148a
Document markdown-rendering parity work (hyperlink clean)
dimitrieh May 29, 2026
66884fc
Wire up rehype slugger/strip plugins and {#custom-id} support
dimitrieh May 29, 2026
3a5f626
Regenerate node-red + blog content from sources
dimitrieh May 30, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
70 changes: 38 additions & 32 deletions .claude/CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,36 @@

## Stack

- **SSG**: Eleventy (11ty) v3, source in `src/`, output to `_site/`
- **CSS**: Tailwind v3 via PostCSS → `_site/css/style.css`
- **Templates**: Nunjucks (`.njk`) + Markdown
- **SSG**: Nuxt 4 static generation (`nuxt/`, output `nuxt/.output/public`).
Eleventy has been fully removed; `src/` is retained only as a data source the
`scripts/copy_*.js` build steps read (see `migration/STATUS.md`).
- **CSS**: Tailwind v3 via PostCSS → `nuxt/public/css/style.css`
- **Pages**: Nuxt `.vue` pages + `@nuxt/content` v3 (markdown under `nuxt/content/`,
generated from `src/` by the copy scripts)
- **Search**: Algolia (`scripts/index-algolia.js`)
- **Hosting**: Netlify; publish dir = `_site`
- **Nuxt migration**: parallel Nuxt 3 project lives in `nuxt/` (see [nuxt/CLAUDE.md](nuxt/CLAUDE.md))
- **Hosting**: Netlify; publish dir = `nuxt/.output/public`
- **Nuxt app**: see [nuxt/CLAUDE.md](nuxt/CLAUDE.md)

## Dev commands

```bash
npm start # all watchers in parallel (11ty + nuxt + postcss + docs + blueprints)
npm run dev # eleventy + postcss + nuxt only
npm run dev:eleventy # 11ty only, port 8080
npm run dev:nuxt # Nuxt only, port 3000/3001
npm run dev # postcss(nuxt) + docs + blueprints watchers + nuxt dev (port 3000)
npm start # alias for npm run dev
npm run docs # sync docs from external source once
npm run build # production build
npm run build # production build (build:nuxt → nuxt generate)
```

> The `src/` content-type docs below describe the markdown/frontmatter the copy
> scripts read; the formats are unchanged from the 11ty era. Rendering is now
> done by Nuxt pages/components, not Nunjucks layouts.

## Directory layout

```
src/
├── _data/ # Global data files (authors, tags, site config, etc.)
├── _includes/
│ ├── layouts/ # Nunjucks layout templates
│ └── components/ # Reusable partials
├── _includes/ # Retained build inputs only: components/icons (SVGs),
│ │ # core-nodes/ + hardware/ (node-red markdown includes)
├── blog/ # Blog posts → /blog/YYYY/MM/slug/
├── changelog/ # Changelog entries → /changelog/YYYY/MM/slug/
├── customer-stories/ # Case studies → /customer-stories/slug/
Expand All @@ -37,8 +41,7 @@ src/
├── images/ # Static images
└── public/ # Pass-through static files
scripts/ # Build-time scripts (copy_docs.js, copy_blueprints.js, etc.)
lib/ # Shared helpers used by .eleventy.js and scripts
.eleventy.js # Main Eleventy config (1100+ lines)
nuxt/ # Nuxt 4 app: pages/, components/, content/, server/, nuxt.config.ts
```

---
Expand All @@ -49,7 +52,7 @@ lib/ # Shared helpers used by .eleventy.js and scripts

**Source:** `src/blog/YYYY/MM/{slug}.md`
**URL:** `/blog/YYYY/MM/{slug}/`
**Layout:** `layouts/post.njk`
**Rendered by:** `nuxt/pages/blog/[...slug].vue` (content generated by `scripts/copy_blog.js`)

```yaml
---
Expand Down Expand Up @@ -83,7 +86,7 @@ Tag options are defined in `src/_data/blogTags.json`. Future-dated posts are exc

**Source:** `src/changelog/YYYY/MM/{slug}.md`
**URL:** `/changelog/YYYY/MM/{slug}/`
**Layout:** `layouts/post-changelog.njk`
**Rendered by:** `nuxt/pages/changelog/[...slug].vue` (content generated by `scripts/copy_changelog.js`)

```yaml
---
Expand All @@ -106,7 +109,7 @@ Each year has a `src/changelog/YYYY/YYYY.json` that tags the collection.

**Source:** `src/handbook/{department}/{slug}.md`
**URL:** `/handbook/{department}/{slug}/`
**Layout:** `layouts/documentation.njk` (shared with docs)
**Rendered by:** `nuxt/pages/handbook/[...slug].vue` + `HandbookNavTree.vue` (content generated by `scripts/copy_handbook.js`)

```yaml
---
Expand All @@ -124,7 +127,7 @@ Collection config: `src/handbook/handbook.json`

**Source:** `src/docs/{section}/{slug}.md` — **do not edit directly**; synced via `node scripts/copy_docs.js` from the external `flowfuse/flowfuse` monorepo.
**URL:** `/docs/{section}/{slug}/`
**Layout:** `layouts/documentation.njk`
**Rendered by:** `nuxt/pages/docs/[...slug].vue` (content generated by `scripts/copy_docs_nuxt.js` from `src/docs`, which `scripts/copy_docs.js` syncs from the external repo)

```yaml
---
Expand All @@ -148,7 +151,7 @@ Collection config: `src/docs/docs.json`

**Source:** `src/customer-stories/{slug}.md`
**URL:** `/customer-stories/{slug}/`
**Layout:** `layouts/story.njk`
**Rendered by:** `nuxt/pages/customer-stories/[...slug].vue` (content generated by `scripts/copy_customer_stories.js`)

```yaml
---
Expand Down Expand Up @@ -191,18 +194,21 @@ Collection config: `src/customer-stories/customer-stories.json`
| `events.yaml` | Event calendar |
| `features.json` | Product feature catalog |
| `integrations.js` | Integration listings |
| `eleventyComputed.js` | Dynamic computed properties |

## Layouts

| Layout | Used by |
|--------|---------|
| `layouts/base.njk` | HTML shell |
| `layouts/post.njk` | Blog posts |
| `layouts/post-changelog.njk` | Changelog entries |
| `layouts/documentation.njk` | Docs + handbook (with sidebar nav) |
| `layouts/story.njk` | Customer stories |
| `layouts/nohero.njk` | General pages without hero |

## Rendering & layouts

Pages are rendered by Nuxt, not Nunjucks. The legacy `layouts/*.njk` templates are gone; their roles map onto the Nuxt app as follows:

| Section | Rendered by |
|---------|-------------|
| HTML shell / chrome | `nuxt/app.vue` + `nuxt/layouts/*.vue` (header/footer components) |
| Blog posts & index | `nuxt/pages/blog/[...slug].vue` |
| Changelog | `nuxt/pages/changelog/[...slug].vue` |
| Docs & handbook (sidebar nav) | `nuxt/pages/docs/[...slug].vue`, `nuxt/pages/handbook/[...slug].vue` + `HandbookNavTree.vue` |
| Customer stories | `nuxt/pages/customer-stories/[...slug].vue` |
| Marketing pages | bespoke `nuxt/pages/**/*.vue` |

Markdown-driven sections use `@nuxt/content` v3 collections (configured in `nuxt/content.config.ts`), populated from `src/` by the `scripts/copy_*.js` build steps.

## Naming conventions

Expand Down
Loading
Loading