2022

Headless CMS website for a business park

Modernizing a community website around a headless CMS while preserving company profiles, editorial content, public routes and search visibility.

Duwijckpark Lier
RoleLead web developer
Period2022
Technology
  • Next.js 16
  • React 19
  • TypeScript
  • BlokNotes CMS
  • Tailwind CSS
  • NextUI
  • Zod
  • Umami
  • Vitest

The challenge

Duwijckpark’s website represents a mixed regional business park and the association behind it. Alongside information, it publishes a directory of more than thirty companies, company profiles, vacancies, news articles, contact details and shared facilities. That content needs to stay current without requiring a source-code change for every company or article.

The existing Next.js application stored editorial data locally. Its modernization had to move that responsibility into a managed content system while preserving the public URLs already known to visitors and search engines.

Moving content into a headless CMS

David reworked the application around the BlokNotes headless CMS. Company and blog pages now obtain published content through a typed API layer, while the website remains responsible for presentation, navigation and metadata. List and detail requests use incremental static regeneration with a sixty-second refresh window, combining fast rendered pages with timely editorial updates.

Runtime schemas validate CMS responses before they enter the UI. Dedicated mappers normalize field names, dates, images, job information and contact details into stable website models. Preview authorization is available during local development but is deliberately excluded from production browser code.

Flexible structured content

A custom block renderer translates the CMS document model into accessible React output. It supports headings, paragraphs, quotations, links, lists, images, code and other structured elements, including nested content. Unsupported blocks are skipped safely, and plain text or Markdown provides a readable fallback when structured content is absent.

This boundary lets editors compose richer company and blog pages without coupling the website to every detail of the CMS payload. Image fields are restricted to the approved asset host and absolute HTTPS URLs before rendering.

Preserving routes through the cutover

The migration treats existing search visibility as a functional requirement. A source-controlled route manifest records previously indexed companies and articles. Renamed company slugs receive permanent redirects, while legacy numeric blog identifiers map to their established descriptive URLs.

The sitemap is generated from both static routes and live published CMS content. A verification script compares the CMS with the indexed-route manifest before production release and fails when a required public slug is missing. Detail pages return a not-found response only for confirmed missing content rather than hiding upstream service failures.

Community journeys and interaction

The responsive Next.js interface combines a company directory, profile pages, logo carousel, vacancy indicators, news archive, association information, service-centre details and maps. Company profiles can expose contact information, imagery, external sites and vacancy links from one content model.

Contact and newsletter forms submit directly to managed CMS forms. Zod validation, hidden honeypot fields and explicit success or failure states make those flows predictable. Umami records successful interactions and performance measurements without allowing analytics failures to interrupt visitors.

Result

Duwijckpark gained an editorially manageable website without sacrificing its established public structure. Content teams can update companies and news independently, while the application protects data contracts, URLs and rendering quality. Automated tests cover pagination, mapping, content blocks, forms and analytics, giving future CMS and interface changes a dependable safety net.

Company information

A clear view of the company behind the software.