+
+ @for (section of copy.sections; track section.id) {
+
+ @if (section.id === 'profile') {
+
+ @for (line of copy.profile; track $index) {
+ - {{ line }}
+ }
+
+
+ }
+ @if (section.id === 'featured-cases') {
+
+ @for (caseStudy of featuredCases(); track caseStudy.id) {
+
+ }
+
+ }
+ }
+
+ {{ copy.timelineHeading }}
+
+ @for (entry of copy.timeline; track entry.id) {
+ -
+
+ {{ entry.period }}
+ · {{ entry.role }}
+
+ {{ entry.body }}
+
+ }
+
+
+
+ {{ copy.stackHeading }}
+
+
+
+
+}
diff --git a/src/app/features/pitch/pitch.ts b/src/app/features/pitch/pitch.ts
new file mode 100644
index 0000000..31821e7
--- /dev/null
+++ b/src/app/features/pitch/pitch.ts
@@ -0,0 +1,24 @@
+import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
+import { ContentService } from '../../core/content/content.service';
+import { CaseCard } from '../../shared/case-card/case-card';
+import { ContentSection } from '../../shared/content-section/content-section';
+import { CtaRow } from '../../shared/cta-row/cta-row';
+import { MetricList } from '../../shared/metric-list/metric-list';
+import { PageHero } from '../../shared/page-hero/page-hero';
+
+@Component({
+ selector: 'app-pitch-page',
+ changeDetection: ChangeDetectionStrategy.OnPush,
+ imports: [PageHero, ContentSection, MetricList, CaseCard, CtaRow],
+ templateUrl: './pitch.html',
+ styleUrl: '../../shared/page-shell.scss',
+})
+export class PitchPage {
+ private readonly content = inject(ContentService);
+
+ protected readonly page = this.content.pitch();
+ protected readonly featuredCases = computed(() => {
+ const ids = this.page().featuredCaseIds;
+ return ids.map((id) => this.content.caseStudy(id)());
+ });
+}
diff --git a/src/app/features/services/services.html b/src/app/features/services/services.html
index bbfd2b4..865eafd 100644
--- a/src/app/features/services/services.html
+++ b/src/app/features/services/services.html
@@ -4,5 +4,10 @@
@for (section of copy.sections; track section.id) {