51 lines
1.3 KiB
TypeScript
51 lines
1.3 KiB
TypeScript
import { type RouteId } from '../routing/route-ids';
|
|
|
|
/**
|
|
* Copy roles stay separate on purpose:
|
|
* - headline is the serious heading used for SEO and page structure
|
|
* - proof is only ever a verifiable statement
|
|
* - playfulLine is an optional wordplay hook that is never a capability claim
|
|
* - cta lives on CtaCopy so action labels stay swappable
|
|
*/
|
|
export interface CopyBlock {
|
|
readonly headline: string;
|
|
readonly proof?: string;
|
|
readonly playfulLine?: string;
|
|
readonly body?: readonly string[];
|
|
}
|
|
|
|
export interface CtaCopy {
|
|
readonly label: string;
|
|
readonly routeId?: RouteId;
|
|
readonly href?: string;
|
|
readonly external?: boolean;
|
|
}
|
|
|
|
export interface SectionCopy extends CopyBlock {
|
|
readonly id: string;
|
|
}
|
|
|
|
export interface PageCopy {
|
|
readonly routeId: RouteId;
|
|
readonly title: string;
|
|
readonly description: string;
|
|
readonly hero: CopyBlock;
|
|
readonly sections: readonly SectionCopy[];
|
|
readonly ctas: readonly CtaCopy[];
|
|
}
|
|
|
|
export interface CaseStudySummary {
|
|
readonly id: string;
|
|
readonly client: string;
|
|
readonly headline: string;
|
|
readonly proof?: string;
|
|
readonly tags: readonly string[];
|
|
readonly routeId?: RouteId;
|
|
}
|
|
|
|
export type LocalizedPages = Partial<Record<RouteId, PageCopy>>;
|
|
|
|
export interface SiteContent {
|
|
readonly pages: LocalizedPages;
|
|
}
|