PROJECTS
Personal Website

Web · Personal Website
Overview
A multilingual personal website (EN/DE/FR (WIP)/IT (WIP)) built as both an introduction and a living record of the work behind it. React 19 and TypeScript power the interface, while Bun runs the build tooling, tests, and typed content pipeline.
The goal was to keep the experience calm and direct: visitors can move from a concise homepage into projects, career history, interests, and the technologies I have used without losing the thread of who I am or how I work.

Content without a CMS
Human-edited Markdown and YAML remain the source of truth. A custom compiler validates each document, combines it with locale-neutral manifest data, and produces a typed browser catalog. That keeps project stories easy to edit while catching missing metadata, stale translations, and invalid relationships before deployment.
The same system supports four languages, localized SEO metadata, alternate-language links, and reusable detail-page patterns without depending on a third-party CMS.

Designed for exploration
The site connects several views of the same experience rather than treating each page as an isolated destination. Homepage previews lead into Selected Work and career entries, project pages connect their stories to the technologies used, and the Tech Stack can be searched, filtered, and sorted by real usage history.
Motion adds rhythm to those transitions, but the interface keeps the content readable and respects prefers-reduced-motion when visitors opt out of animation.

Deployment and AWS infrastructure
Every public route and locale is prerendered to static HTML for fast first loads, resilient sharing previews, and useful content before JavaScript finishes. AWS CDK manages the production infrastructure: Route 53 and ACM provide DNS and TLS, CloudFront delivers the site from a private, encrypted, versioned S3 origin, and a CloudFront Function handles the canonical-domain redirect and clean-URL rewrites.
Version tags trigger GitHub Actions to validate and build the site, assume a least-privilege AWS deployment role through OIDC, upload assets to S3 with cache-aware policies, invalidate CloudFront, and verify the live deployment. No permanent AWS credentials are stored in GitHub.
The contact form is the only server-side path. CloudFront routes /api/contact to a throttled API Gateway HTTP API and an ARM Lambda function that validates the request and delivers it through SES without storing message content. CloudWatch alarms and SNS notifications monitor API and Lambda failures, while access logs use limited retention.
The responsive layout is tested across desktop and phone viewports, and assets are handled by Bun's build pipeline so the same source supports local development and production output.
Built to evolve
The project includes unit tests for content relationships and UI behavior, TypeScript checks at module boundaries, translation freshness checks, and automated content compilation. Semantic navigation, visible focus states, reduced-motion support, localized labels, and consent-aware analytics are treated as part of the product rather than final polish.
That foundation makes the website useful as an ongoing system: new work can be added as structured content while the shared page patterns, accessibility behavior, and delivery pipeline remain consistent.