content: drop repeated reference headings and land case CTAs on anchors

Service notes now say why the public case fits, the four case CTAs
open the matching project fragment, and the Innofocus run-time figure
is a case metric as well as a home tile.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 17:52:37 +02:00
parent cfc7580a8f
commit 763bf435c9
8 changed files with 65 additions and 24 deletions

View File

@@ -37,11 +37,15 @@ describe('content claims and attribution', () => {
expect(Object.keys(site.cases)).toEqual([...CASE_STUDY_IDS]);
expect(CASE_STUDY_IDS).toEqual(['innofocus', 'roesterei', 'myspa', 'hdi']);
const runtimeMetrics = allMetrics(site).filter(
(metric) => /8/.test(metric.value) && /90/.test(metric.value),
);
expect(runtimeMetrics).toHaveLength(1);
expect(runtimeMetrics[0]?.caseId).toBe('innofocus');
const matchesRuntime = (metric: MetricCopy) =>
/8/.test(metric.value) && /90/.test(metric.value);
const runtimeMetrics = allMetrics(site).filter(matchesRuntime);
expect(runtimeMetrics.every((metric) => metric.caseId === 'innofocus')).toBe(true);
expect(site.home.metrics.filter(matchesRuntime)).toHaveLength(1);
expect(site.cases.innofocus.metrics.filter(matchesRuntime)).toHaveLength(1);
for (const caseId of CASE_STUDY_IDS.filter((id) => id !== 'innofocus')) {
expect(site.cases[caseId].metrics.filter(matchesRuntime)).toHaveLength(0);
}
const leadershipMetrics = allMetrics(site).filter(
(metric) =>