Built with my own hands

This Website

The site you are looking at right now is a project in its own right: Designed, coded, and shipped end to end with agentic coding, and wired up to talk directly to AI agents.

It is an Astro site with a single, fully typed content model: Every page, in both English and German, comes from one structured data file, so nothing drifts between languages and every new section is one edit away in both locales at once.

It ships as static HTML to shared hosting over plain FTP, no server-side framework, no database. The one dynamic piece is a small MCP (Model Context Protocol) server, written in plain PHP with zero dependencies, that answers structured questions about my profile, career, expertise, and projects over JSON-RPC 2.0, for any MCP-compatible AI client to call directly.

Cloudflare sits in front of it and does the routing trick that makes a clean "/mcp" URL work without a single redirect: An edge-side URL rewrite hands the request straight to the PHP file, so MCP clients never see a 301 and never choke on it. The whole build, from the Astro architecture to the PHP server to the Cloudflare rule, was built through agentic coding with Claude Code.

Preview of the homepage — real screenshot coming soon

What is under the hood

One typed, bilingual (EN/DE) content model, no content forks

Static Astro build, deployed over FTP to shared hosting

Custom MCP server in plain PHP, zero dependencies, JSON-RPC 2.0

Cloudflare edge rule routes /mcp with no redirect, no rewrite rule

llms.txt and llms-full.txt generated automatically on every build

Built end to end through agentic coding with Claude Code

Tech stack

  • Astro
  • TypeScript
  • Cloudflare
  • PHP 8
  • JSON-RPC 2.0 / MCP
  • bplaced shared hosting
  • Claude Code

Try the MCP server yourself

The server exposes seven tools (get_profile, get_career, get_expertise, get_projects, get_hobby_projects, get_contact, search_content) at https://www.bernhardweyrauch.de/mcp. Any MCP-compatible client can connect to it directly, for example from a terminal with Claude Code:

bernhard@weyrauch: ~

1 · MCP request (the prompt)

MCP request (the prompt)

2 · LLM response

LLM response