Back to Nexxspan dashboard

Nexxspan CMS workflow

Nexxspan compiled preview

This is a small migration pass: homepage, inferred navigation, footer/legal links, top-level product category cards, theme tokens, and obvious homepage assets only.

not production live
Client
Nexxspan
Source mode
Local Legacy Export
Future source
NetSuite/File Cabinet
Current stage
Compile
Runtime model
Static Published Snapshot
Public websites consume their latest published snapshot at build or deploy time. They do not read Feasure CMS at runtime.

Migration compile status

Compiled preview succeeded

This preview is not automatically live production. Publishing remains a future handoff step.

migration preview

JSON accounted

0/0

Pages

1

Sections

5

Categories

0

Products deferred

0

Warnings

  • This adapter is temporary migration support and should be replaced by NetSuite-derived normalized source data.
  • Product detail pages are intentionally not compiled in this pass.

Errors

No errors.

Draft editing

Editing Mode Coming Next

placeholder

Users will edit draft content here through controlled fields.

Changes will be saved as drafts first, not pushed directly live.

Publishing will validate the draft, generate a published snapshot, and hand it off to the client website.

In production, NetSuite/File Cabinet will remain the source of truth for source-owned records and assets.

Publish action placeholder

Snapshot publishing is not wired yet

This panel uses future CMS language without performing persistence, GitHub writes, Netlify deploys, or production publishes.

mock controls
Preview Draft
Last Published
Not connected yet
Publish Target
Nexxspan website snapshot
Current Handoff
/nexxspan/handoff/nexxspan.published.snapshot.json

Normalized source summary

Source pages

1

Source categories

0

Source products

0

Source assets

3

Rendered preview

The compiled preview renders through the same registry as demo clients, using only generic components. This is draft validation language, not a production publish.

Nexxspan

Innovative Solutions for Patient Spaces

Modular infrastructure for adaptable patient spaces.

Explore Nexxspan
Nexxspan homepage hero image

Explore Nexxspan categories

This first pass uses top-level legacy category records only.

Build a validated Nexxspan snapshot

This preview compiles a small migration subset from legacy source data.

Review source contract

Nexxspan

Compiled locally from a quarantined legacy source export.

Compatibility and gap report

Missing fields

  • Explicit NetSuite source ownership per field
  • Stable slugs for all migrated pages
  • Explicit category-to-product relationship records

Missing product IDs

No missing product identifiers.

Missing SEO metadata

  • Homepage SEO title/description confirmation
  • SEO metadata for product, category, legal, and info pages

Missing alt text

  • Most legacy image assets do not have source-owned alt text.

Theme gaps

  • Confirmed primary/accent colors
  • Typography scale
  • Spacing and radius tokens

nexxspan-site tasks

  • Replace nexxspan-site runtime JSON reads with compiled snapshot loading.
  • Map image/document references to published static assets.
  • Replace legacy page-specific rendering with registered generic sections where possible.
Source file accounting
{
  "usedFiles": [],
  "deferredFiles": [],
  "ignoredFiles": [],
  "frontendShapedLegacyFiles": []
}

Website Handoff: Published Snapshot

nexxspan.published.snapshot.json

This JSON is the static contract that nexxspan-site consumes. The current handoff route is /nexxspan/handoff/nexxspan.published.snapshot.json. In production, Feasure CMS will write this to the client website repository or publish pipeline. For now, it is manually copied and consumed as generated local content.

Handoff status: this panel exposes the Published Snapshot output, but real GitHub publishing, Netlify deploy triggers, and production release controls are intentionally not connected yet.

nexxspan-site implementation tasks

  • Add src/content/generated/nexxspan.published.snapshot.json to nexxspan-site.
  • Add a snapshot loader that validates or narrows the snapshot shape before rendering.
  • Render homepage sections through a component registry keyed by section.component.
  • Map logoNav, imageHero, categoryCardGrid, cta, and footer to existing Nexxspan visual components where possible.
  • Keep static pages and product detail pages outside this snapshot untouched for now.
  • Replace Feasure local source asset URLs with nexxspan-site public/static asset paths during handoff.

Components required

  • logoNav
  • imageHero
  • categoryCardGrid
  • cta
  • footer

Routes required

  • /

Asset handling notes

  • The snapshot currently references local Feasure handoff asset URLs for preview.
  • nexxspan-site should copy only referenced assets needed for this minimal subset into its public/static content area.
  • Use snapshot.assets as the source of labels, URLs, source files, and available alt text.
  • Missing source-owned alt text is tracked in the compatibility report and should be improved later.
Theme tokens used
{
  "primaryColor": "#f58220",
  "accentColor": "#1f2933",
  "logoAssetId": "logo-main",
  "faviconAssetId": "favicon",
  "stylePreset": "technical",
  "cornerRadius": "medium"
}
Copyable nexxspan-site implementation prompt
You are working in the separate nexxspan-site project.

Use the Feasure CMS handoff snapshot as a static content contract.

Add:
- src/content/generated/nexxspan.published.snapshot.json
- a content loader for the snapshot
- TypeScript types and/or Zod validation for the snapshot shape
- a homepage renderer that iterates pages[0].sections and dispatches by section.component

Render these component names from the snapshot:
- logoNav
- imageHero
- categoryCardGrid
- cta
- footer

Required route coverage:
- /

Implementation constraints:
- Preserve the current Nexxspan visual style as much as possible.
- Use generic renderer components only; do not create HeadwallSection, RailSection, TadSection, or other product-specific renderer components.
- Do not redesign the current site.
- Keep static pages and product detail pages not included in the snapshot untouched for now.
- Treat snapshot.metadata.theme, snapshot.metadata.navigation, and snapshot.metadata.footerLinks as the source of theme/nav/footer metadata for this subset.
- Handle assets from snapshot.assets. Copy referenced assets into nexxspan-site public/static content as needed and update URLs if required.

Initial implementation task list:
- Add src/content/generated/nexxspan.published.snapshot.json to nexxspan-site.
- Add a snapshot loader that validates or narrows the snapshot shape before rendering.
- Render homepage sections through a component registry keyed by section.component.
- Map logoNav, imageHero, categoryCardGrid, cta, and footer to existing Nexxspan visual components where possible.
- Keep static pages and product detail pages outside this snapshot untouched for now.
- Replace Feasure local source asset URLs with nexxspan-site public/static asset paths during handoff.
Handoff snapshot preview
{
  "siteId": "nexxspan",
  "siteName": "Nexxspan",
  "version": "0.2.0-nexxspan-preview",
  "status": "published",
  "publishedAt": null,
  "metadata": {
    "description": "Minimal Nexxspan preview compiled from a quarantined legacy export.",
    "sourceSystem": "legacy_public_export",
    "designPreset": "technical",
    "theme": {
      "primaryColor": "#f58220",
      "accentColor": "#1f2933",
      "logoAssetId": "logo-main",
      "faviconAssetId": "favicon",
      "stylePreset": "technical",
      "cornerRadius": "medium"
    },
    "navigation": [
      {
        "id": "home",
        "label": "Home",
        "href": "/",
        "source": "inferred"
      },
      {
        "id": "about",
        "label": "About",
        "href": "/about",
        "source": "inferred"
      },
      {
        "id": "careers",
        "label": "Careers",
        "href": "/careers",
        "source": "inferred"
      },
      {
        "id": "contact",
        "label": "Contact",
        "href": "/contact",
        "source": "inferred"
      }
    ],
    "footerLinks": [],
    "scope": "homepage/navigation/footer/category-cards only",
    "handoff": {
      "filename": "nexxspan.published.snapshot.json",
      "status": "local handoff preview",
      "source": "Feasure CMS Nexxspan legacy migration compile preview",
      "scope": "homepage/navigation/footer/category-cards/theme/assets only"
    }
  },
  "pages": [
    {
      "id": "home",
      "slug": "/",
      "title": "Home",
      "seo": {
        "title": "Nexxspan",
        "description": "Modular infrastructure for adaptable patient spaces."
      },
      "sections": [
        {
          "id": "nexxspan-nav",
          "component": "logoNav",
          "props": {
            "siteName": "Nexxspan",
            "logoUrl": "/clients/nexxspan/source-assets/img/logo.png",
            "logoAlt": "Nexxspan logo",
            "items": [
              {
                "label": "Home",
                "href": "/"
              },
              {
                "label": "About",
                "href": "/about"
              },
              {
                "label": "Careers",
                "href": "/careers"
              },
              {
                "label": "Contact",
                "href": "/contact"
              }
            ]
          }
        },
        {
          "id": "nexxspan-hero",
          "component": "imageHero",
          "props": {
            "eyebrow": "Nexxspan",
            "headline": "Innovative Solutions for Patient Spaces",
            "body": "Modular infrastructure for adaptable patient spaces.",
            "imageUrl": "/clients/nexxspan/source-assets/Home/HomePage/images/Heroes/HomePageHero1.jpg",
            "imageAlt": "Nexxspan homepage hero image",
            "primaryCtaLabel": "Explore Nexxspan",
            "primaryCtaHref": "#categories"
          }
        },
        {
          "id": "nexxspan-categories",
          "component": "categoryCardGrid",
          "props": {
            "anchorId": "categories",
            "headline": "Explore Nexxspan categories",
            "body": "This first pass uses top-level legacy category records only.",
            "categories": []
          }
        },
        {
          "id": "nexxspan-cta",
          "component": "cta",
          "props": {
            "headline": "Build a validated Nexxspan snapshot",
            "body": "This preview compiles a small migration subset from legacy source data.",
            "primaryCtaLabel": "Review source contract",
            "primaryCtaHref": "/nexxspan/source-preview"
          }
        },
        {
          "id": "nexxspan-footer",
          "component": "footer",
          "props": {
            "siteName": "Nexxspan",
            "body": "Compiled locally from a quarantined legacy source export.",
            "links": []
          }
        }
      ]
    }
  ],
  "assets": [
    {
      "id": "logo-main",
      "url": "/clients/nexxspan/source-assets/img/logo.png",
      "alt": "Nexxspan logo",
      "type": "image",
      "label": "Nexxspan logo",
      "sourceFile": "img/logo.png"
    },
    {
      "id": "favicon",
      "url": "/clients/nexxspan/source-assets/Brand/images/favicon.png",
      "alt": "Nexxspan favicon",
      "type": "image",
      "label": "Nexxspan favicon",
      "sourceFile": "Brand/images/favicon.png"
    },
    {
      "id": "homepage-hero",
      "url": "/clients/nexxspan/source-assets/Home/HomePage/images/Heroes/HomePageHero1.jpg",
      "alt": "Nexxspan homepage hero image",
      "type": "image",
      "label": "Homepage hero image",
      "sourceFile": "Home/HomePage/images/Heroes/HomePageHero1.jpg"
    }
  ],
  "products": []
}
Developer Preview: generated snapshot JSON
{
  "siteId": "nexxspan",
  "siteName": "Nexxspan",
  "version": "0.2.0-nexxspan-preview",
  "status": "draft",
  "publishedAt": null,
  "metadata": {
    "description": "Minimal Nexxspan preview compiled from a quarantined legacy export.",
    "sourceSystem": "legacy_public_export",
    "designPreset": "technical",
    "theme": {
      "primaryColor": "#f58220",
      "accentColor": "#1f2933",
      "logoAssetId": "logo-main",
      "faviconAssetId": "favicon",
      "stylePreset": "technical",
      "cornerRadius": "medium"
    },
    "navigation": [
      {
        "id": "home",
        "label": "Home",
        "href": "/",
        "source": "inferred"
      },
      {
        "id": "about",
        "label": "About",
        "href": "/about",
        "source": "inferred"
      },
      {
        "id": "careers",
        "label": "Careers",
        "href": "/careers",
        "source": "inferred"
      },
      {
        "id": "contact",
        "label": "Contact",
        "href": "/contact",
        "source": "inferred"
      }
    ],
    "footerLinks": [],
    "scope": "homepage/navigation/footer/category-cards only"
  },
  "pages": [
    {
      "id": "home",
      "slug": "/",
      "title": "Home",
      "seo": {
        "title": "Nexxspan",
        "description": "Modular infrastructure for adaptable patient spaces."
      },
      "sections": [
        {
          "id": "nexxspan-nav",
          "component": "logoNav",
          "props": {
            "siteName": "Nexxspan",
            "logoUrl": "/clients/nexxspan/source-assets/img/logo.png",
            "logoAlt": "Nexxspan logo",
            "items": [
              {
                "label": "Home",
                "href": "/"
              },
              {
                "label": "About",
                "href": "/about"
              },
              {
                "label": "Careers",
                "href": "/careers"
              },
              {
                "label": "Contact",
                "href": "/contact"
              }
            ]
          }
        },
        {
          "id": "nexxspan-hero",
          "component": "imageHero",
          "props": {
            "eyebrow": "Nexxspan",
            "headline": "Innovative Solutions for Patient Spaces",
            "body": "Modular infrastructure for adaptable patient spaces.",
            "imageUrl": "/clients/nexxspan/source-assets/Home/HomePage/images/Heroes/HomePageHero1.jpg",
            "imageAlt": "Nexxspan homepage hero image",
            "primaryCtaLabel": "Explore Nexxspan",
            "primaryCtaHref": "#categories"
          }
        },
        {
          "id": "nexxspan-categories",
          "component": "categoryCardGrid",
          "props": {
            "anchorId": "categories",
            "headline": "Explore Nexxspan categories",
            "body": "This first pass uses top-level legacy category records only.",
            "categories": []
          }
        },
        {
          "id": "nexxspan-cta",
          "component": "cta",
          "props": {
            "headline": "Build a validated Nexxspan snapshot",
            "body": "This preview compiles a small migration subset from legacy source data.",
            "primaryCtaLabel": "Review source contract",
            "primaryCtaHref": "/nexxspan/source-preview"
          }
        },
        {
          "id": "nexxspan-footer",
          "component": "footer",
          "props": {
            "siteName": "Nexxspan",
            "body": "Compiled locally from a quarantined legacy source export.",
            "links": []
          }
        }
      ]
    }
  ],
  "assets": [
    {
      "id": "logo-main",
      "url": "/clients/nexxspan/source-assets/img/logo.png",
      "alt": "Nexxspan logo",
      "type": "image",
      "label": "Nexxspan logo",
      "sourceFile": "img/logo.png"
    },
    {
      "id": "favicon",
      "url": "/clients/nexxspan/source-assets/Brand/images/favicon.png",
      "alt": "Nexxspan favicon",
      "type": "image",
      "label": "Nexxspan favicon",
      "sourceFile": "Brand/images/favicon.png"
    },
    {
      "id": "homepage-hero",
      "url": "/clients/nexxspan/source-assets/Home/HomePage/images/Heroes/HomePageHero1.jpg",
      "alt": "Nexxspan homepage hero image",
      "type": "image",
      "label": "Homepage hero image",
      "sourceFile": "Home/HomePage/images/Heroes/HomePageHero1.jpg"
    }
  ],
  "products": []
}