Some checks failed
Architecture Governance / architecture (push) Has been cancelled
Replace global duplicate-slug/empty-title banners with per-page indicators: a danger badge next to the offending page's heading, plus inline error text on the specific pageId/slug app-form-field. Made ContentPageService.normalizeSlug public (was private) so the component can match validation results to a given page's normalized slug without duplicating the normalization logic. Verified in browser: setting a duplicate slug live shows both the header badge and the inline field error immediately. Completes Sprint 3 (Static Page Generator): DRY cleanup, Design System adoption, SEO field coverage, per-page validation UX.