The global duplicate violated the component-owned selector rule; the surviving rule still pins subtle text at full opacity. Co-authored-by: Cursor <cursoragent@cursor.com>
Portfolio
Bilingual portfolio for Antonio Ledebuhr, a software and DevOps engineer. German is the default language at /. English is the full second version under /en. Home speaks to small-company customers. /pitch is the recruiter-oriented page and is not in the primary navigation.
This repository is the Angular 21 standalone, zoneless, SSR application that serves both locales from one build.
Prerequisites
- Node.js 22 or newer
- npm 11 or newer (npm 12 prints an engine-compatibility warning on some Node 24 builds; that warning is not an error)
Install
npm install
Scripts
| Script | Description |
|---|---|
npm start |
Start the Angular dev server. |
npm run build |
Production build (default configuration), including SSR and prerendering. |
npm run watch |
Development rebuild on change. |
npm test |
Unit tests in watch mode. |
npm run test:ci |
Unit tests once; exits when finished. |
npm run lint |
Run ESLint. |
npm run lint:fix |
Run ESLint with autofix. |
npm run format |
Format the workspace with Prettier. |
npm run format:check |
Check formatting without writing. |
npm run serve:ssr |
Serve the production SSR bundle from dist/. |
npm run serve:ssr:Portfolio |
Alias of serve:ssr. |
npm run e2e |
Playwright + axe-core against the production SSR bundle. |
npm run e2e:install |
Install the pinned Chromium build for Playwright. |
npm run lighthouse |
Production build, then Lighthouse CI (lighthouserc.json). |
npm run ci |
lint, format check, tests, then production build. |
npm run cv:link |
Add the visible /pitch URL and link annotation to CV.pdf (idempotent). |
Local SSR build
npm run build
npm run serve:ssr
The server listens on http://localhost:4000 unless PORT is set. The CV is copied into the browser output at /cv/CV.pdf. The header no longer offers that download; Pitch and the terminal navigate cv command still do. The lower-right terminal dock replaces the old centered command palette (Ctrl+K / ⌘K).
npm run e2e builds the SSR bundle and serves it on port 4173. npm run lighthouse builds, then starts the SSR server on port 4000. Browser binaries and generated reports (test-results, playwright-report, .lighthouseci) are not committed.
Project structure
src/app/core/ Typed contracts: locale, routing, navigation, content, platform
src/app/features/ One standalone page per route id
src/app/shared/ Reusable UI primitives
src/app/components/ Existing decorative widgets (skills, dot background)
src/styles.scss Design tokens and global primitives
src/_breakpoints.scss Breakpoint map and respond-to mixin
public/ Static SVG assets
Design tokens live in src/styles.scss as CSS custom properties. Content contracts and the bilingual copy tree live in src/app/core/content. Route ids and locale path tables live in src/app/core/routing.
Contributor and agent conventions are in AGENTS.md.
Legal pages
The Impressum (/impressum, /en/legal-notice) and Datenschutz (/datenschutz, /en/privacy) pages contain unreviewed placeholders. They must be checked by the site owner before publication.