integration: add route metadata, JSON-LD and harden the public shell

Ship prerendered SEO, crawl files and palette/map a11y so every locale route is indexable, honest and keyboard-usable without inventing claims.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 18:28:22 +02:00
parent 2ccac6b28a
commit 46c86447d1
48 changed files with 1597 additions and 207 deletions

View File

@@ -23,11 +23,15 @@ export interface SystemsMapNodeView {
readonly x: number;
readonly y: number;
readonly label: string;
readonly labelLines: readonly string[];
readonly summary: string;
readonly href: string;
readonly link: unknown[];
readonly relationship: string;
readonly accessibleName: string;
readonly shapeWidth: number;
readonly shapeHeight: number;
readonly textStartDy: number;
}
export interface SystemsMapEdgeView {
@@ -191,7 +195,10 @@ export class SystemsMap {
);
const relationship = relationshipLabel.replace('{targets}', connectedLabels.join(', '));
const label = node.label[locale];
const labelLines = node.labelLines[locale];
const summary = node.summary[locale];
const multiline = labelLines.length > 1;
const longest = labelLines.reduce((max, line) => Math.max(max, line.length), 0);
return {
id: node.id,
@@ -200,7 +207,11 @@ export class SystemsMap {
x: node.x,
y: node.y,
label,
labelLines,
summary,
shapeWidth: Math.max(140, longest * 8 + 24),
shapeHeight: multiline ? 52 : 40,
textStartDy: multiline ? -6 : 4,
href: routePath(node.routeId, locale),
link: this.navigation.link(node.routeId),
relationship,