content: replace scaffolding with bilingual pages and case studies

Ship the final German and English copy, compose every route from shared page primitives, and cover claims, parity and contact briefing in tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-25 17:34:04 +02:00
parent 9ea2885c7b
commit d954361724
95 changed files with 4161 additions and 419 deletions

View File

@@ -1,13 +1,35 @@
import { ChangeDetectionStrategy, Component, inject } from '@angular/core';
import { ChangeDetectionStrategy, Component, computed, inject } from '@angular/core';
import { ContentService } from '../../core/content/content.service';
import { PagePlaceholder } from '../../shared/page-placeholder/page-placeholder';
import { CaseStudy } from '../../shared/case-study/case-study';
import { ContentSection } from '../../shared/content-section/content-section';
import { PageHero } from '../../shared/page-hero/page-hero';
const INTRO_SECTION_IDS = new Set(['selection', 'reading']);
@Component({
selector: 'app-projects-page',
changeDetection: ChangeDetectionStrategy.OnPush,
imports: [PagePlaceholder],
imports: [PageHero, ContentSection, CaseStudy],
templateUrl: './projects.html',
styleUrl: '../../shared/page-shell.scss',
})
export class ProjectsPage {
protected readonly page = inject(ContentService).page('projects');
private readonly content = inject(ContentService);
protected readonly page = this.content.page('projects');
protected readonly cases = this.content.cases();
protected readonly introSections = computed(() =>
this.page().sections.filter((section) => INTRO_SECTION_IDS.has(section.id)),
);
protected readonly caseLabels = computed(() => {
const headlines = new Map(
this.page().sections.map((section) => [section.id, section.headline] as const),
);
return {
situation: headlines.get('situation') ?? '',
approach: headlines.get('approach') ?? '',
outcome: headlines.get('outcome') ?? '',
stack: headlines.get('stack') ?? '',
};
});
}