Front-Office Coverage Analysis

This document compares the requirements defined in the Next-Generation CMS — Technical Architecture specification (V0.1, October 2025) against the actual state of the Front-Office codebase (cms-fo v0.12.6). It serves as a living reference for tracking progress toward production readiness (v1.0).
Last updated: February 2026. Based on spec sections 3–6 and the technical roadmap (section 10).

1. Technology Stack

Reference: spec sections 4.2, 4.6.
RequirementStatusDetails
Nuxt 4 / Vue 3CoveredNuxt 4.2.2, Vue 3.5.22
TypeScriptCoveredTypeScript 5.9.3
SSR + Static Generation (hybrid)CoveredSSG enabled, ISR configured in nuxt.config.ts
Node.js >= 18CoveredEnforced in package.json engines
Stateless containerCoveredNo local state; horizontal scaling ready
Tailwind CSSCoveredTailwind CSS v4.1.16 via Vite
Verdict: 100% covered.

2. Roadmap Milestones (FO Track)

Reference: spec section 10.1.
VersionScopeStatusNotes
v0.1Project bootstrap, static content renderDoneNuxt skeleton, base components, Helm-ready
v0.3Pages + articles SSR, i18n, CDN delivery testDoneSSR pages, articles, 3 locales (EN/FR/NL), cache headers
v0.5Preview tokens (X-Preview-Token) + Redis cachePartialPreview composables exist (usePreview, useIsPreviewMode, server middleware). Redis not connected — server stores data in local JSON
v0.7Dashboard metrics, Unlayer integration, Matomo stubPartialUnlayer parser integrated, cache-metrics page exists. Matomo not integrated
v0.9Dynamic blocks (token-driven) + theme customizationDone95+ blocks, 4 design templates, full design-token architecture
v1.0Hardening, perf audits (k6 + Lighthouse), accessibility AAPartialPerformance optimizations in place. k6, Lighthouse CI, and formal a11y audit missing

3. Content & Routing

Reference: spec sections 4.2, 10.1 (v0.3–v0.8).
RequirementStatusImplementation
Static pages (SSR)Coveredpages/[slug].vue, pages/index.vue
Articles / blogCoveredpages/articles/index.vue, pages/articles/[slug].vue, useArticles composable
CategoriesCoveredpages/categories/, useCategories composable
TagsCoveredpages/tags/, useTags composable
SearchCoveredpages/search.vue, useSearch composable
Archive by dateCoveredpages/archive/[year]/[month].vue
GalleryCoveredpages/gallery/[slug].vue
EventsCoveredpages/events/[slug].vue
Breadcrumbs / navigationCovereduseBreadcrumbs, useMenu, Header/Footer components
i18n (multilingual)Covered@nuxtjs/i18n with 3 locales, useLocaleFallback, localized slugs
SitemapCoveredserver/routes/sitemap.xml.get.ts
Verdict: 100% covered.

4. Shared Services Integration

Reference: spec sections 3.2, 5.2.
ServiceSpec requirementFO statusGap
CMS API (Symfony)FO consumes public REST endpointsCovereduseApiConfig, per-composable fetching, configurable base URL
Keycloak (OIDC)Auth for preview / private areasPartialKeycloak env vars present (KEYCLOAK_*). FO is public-facing; auth limited to builder/preview context
CDN (EU, Surrogate-Key purge)Edge delivery of SSR + assetsNot coveredCache headers configured (s-maxage, stale-while-revalidate). No CDN integration, no surrogate-key purge mechanism
S3 (media storage)Serve media via CDN URLsCoveredNUXT_PUBLIC_MEDIA_BASE_URL configured; images served from S3-compatible origin
Redis (cache, preview tokens)Cache JWKS, preview tokens, rate-limitsNot coveredServer uses local JSON storage. No Redis client in FO
Elasticsearch / OpenSearchFull-text searchNot covereduseSearch composable exists but queries the CMS API — no direct search-engine connection
Matomo (analytics + CMP)GDPR-compliant analyticsNot coveredNo Matomo script, no CMP integration
OpenTelemetryTraces, metrics, logsPartialuseWebVitals tracks Core Web Vitals client-side. No OpenTelemetry SDK, no server-side instrumentation
n8n (webhooks)Event-driven automationN/AEvents are emitted by the API, not the FO

5. Non-Functional Requirements

Reference: spec sections 4.8, 5.3, 5.4.

5.1 Performance SLOs

SLOTargetFO statusGap
Lighthouse score>= 90 (Perf / SEO / A11y)Not verifiedNo Lighthouse CI in pipeline. Optimizations in place (code splitting, lazy loading, nuxt-vitalizer, nuxt-delay-hydration)
TTFB (EU)<= 600 msNot measuredNo CDN analytics, no RUM
Cache hit ratio (public routes)>= 85%Not measuredNo CDN integrated
Error rate<= 1% over 5 minNot measuredNo Prometheus / alerting integration

5.2 Security

RequirementStatusDetails
CSP (hash-only)Coveredserver/plugins/csp-hash.ts generates SHA-256 hashes at build time
Trusted Types (report-only v1)Not coveredNot implemented
TLS 1.3N/A (FO)Handled by Ingress Controller
EU data residencyCoveredNo data stored in FO; all data from API / S3
HTML sanitizationCoveredutils/sanitizeInlineHtml.ts
Security utilsCoveredutils/security.ts

5.3 Accessibility

RequirementStatusDetails
RGAA / WCAG 2.1 AA baselinePartialuseA11y composable, utils/a11y.ts utilities. No formal audit or automated scoring in CI

5.4 Observability

RequirementStatusDetails
OpenTelemetry tracesNot coveredNo OTel SDK
Prometheus metricsNot coveredNo metrics endpoint
Centralized logsNot coveredNo structured log export
Web Vitals (RUM)PartialuseWebVitals in app.vue — client-side only, not forwarded to OTel collector

6. Design System & Theming

Reference: spec section 6.2 (“Areas Extending the Platform”).
RequirementStatusDetails
Design-token systemCoveredFull architecture: baseColorspalette (50–950) → semantic tokens → CSS variables
Multi-template renderingCovered4 templates: Default, AuroraPulse, CanvasMosaic, NordicLedger
Token-driven dynamic blocksCovered95+ blocks with per-template variants; BlockTemplateWrapper, useBlockVariant, variantResolver
Token generation scriptCoveredscripts/generate-design-tokens.mjs
Template-specific CSSCoveredassets/styles/templates-*.css, tokens.*.generated.css
Verdict: 100% covered.

7. CI/CD & Quality Gates

Reference: spec sections 5.6, 10.1 (v1.0).
RequirementStatusGap
k6 load testingNot coveredNo k6 scripts or CI integration
Lighthouse CI audits (>= 90)Not coveredNo Lighthouse CI step
Automated security scans (Trivy / Grype)Not coveredNo container image scanning in FO repo
Helm chartsNot coveredNo Helm chart in FO repo (may live elsewhere)
DockerfileNot coveredNo Dockerfile in FO repo

8. Summary Scorecard

CategoryCoverageScore
Technology StackFull100%
Content Management (pages, articles, categories, tags, search)Full100%
i18n / MultilingualFull100%
Design Tokens & ThemingFull100%
Dynamic BlocksFull100%
Preview ModeComposables OK, no Redis~70%
API IntegrationWorking, homepage still on temp JSON~80%
CDN / Surrogate-key PurgeNot started0%
Search Engine (ES / OpenSearch)Not connected0%
Analytics (Matomo + CMP)Not started0%
Observability (OpenTelemetry)Web Vitals only~20%
Performance CI (k6 + Lighthouse)Not integrated0%
Accessibility (formal audit)Utils OK, no CI gate~40%
Security (CSP + Trusted Types)CSP OK, Trusted Types missing~60%
Containerization (Dockerfile + Helm)Not in FO repo0%

Overall estimated coverage: ~65–70%


9. Gap Prioritization (Path to v1.0)

Ordered by impact and dependency chain:
PriorityGapRationale
P0CDN integration + surrogate-key purgeCore delivery model described in spec 4.2. Blocks all cache-hit-ratio SLOs
P0Dockerfile + Helm chartRequired for Kubernetes deployment (spec 4.5)
P1Redis integration (preview tokens)Replaces temporary JSON storage. Required for multi-instance preview (spec v0.5)
P1OpenTelemetry SDKRequired for platform observability alignment (spec 5.5)
P1Matomo + CMPRequired for GDPR-compliant analytics (spec 5.2, v0.7)
P2Lighthouse CIQuality gate for merge-to-main (spec 5.6.2)
P2k6 load testingSLO verification in CI (spec 5.6.2)
P2Search engine connectionFull-text search via ES/OpenSearch (spec v0.8)
P2Trusted Types (report-only)Additional XSS mitigation layer (spec 5.3.3)
P3Formal accessibility auditRGAA / WCAG 2.1 AA certification (spec 4.8)
P3Homepage blocks: migrate from JSON to APIRemove temporary storage, use real API endpoint

Further Reading