feat: search metadata, structured data and indexing rules

Only the production deployment may be indexed; testing and preview builds
answer with noindex and a closed robots file. The homepage now describes the
person, the services and the FAQ as structured data, and title, description
and the 404 page are written for what people search for.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-04 13:07:03 +02:00
co-authored by Claude Opus 5.5
parent 390936856c
commit e9f05b02fc
18 changed files with 563 additions and 89 deletions
+5 -31
View File
@@ -1,41 +1,15 @@
import * as React from "react";
const QUESTIONS = [
{
q: "I am not technical. Is that a problem?",
a: "No. I explain what I am doing in plain language, and you can ask at any time. You do not need to read code.",
},
{
q: "How long am I committed?",
a: "Project work is billed by effort. Either side can end it with two weeks notice to the end of a month.",
},
{
q: "Who owns what you build?",
a: "You do. Code and design belong to you, and you can hand them to another developer.",
},
{
q: "Can you work with our existing team and code?",
a: "Yes. I worked in agencies and product teams for years, so joining an existing project is familiar to me.",
},
{
q: "How do I reach you?",
a: "By email or video call. I work remotely and am available during European business hours.",
},
{
q: "What do you not do?",
a: "Mobile apps for the app stores, Windows software and running your servers. If your project needs those, I say so in the first call.",
},
] as const;
import { FAQ } from "@/src/content/faq";
export const Faq: React.FC = () => (
<div className="grid grid-cols-1 gap-x-12 md:grid-cols-2">
{QUESTIONS.map((item) => (
{FAQ.map((item) => (
<details
key={item.q}
key={item.question}
className="group border-t border-slate-200 py-6 open:pb-8"
>
<summary className="flex cursor-pointer list-none items-start justify-between gap-6 font-sans text-xl font-bold tracking-tight text-slate-900 md:text-2xl [&::-webkit-details-marker]:hidden">
{item.q}
{item.question}
<span
className="mt-1 shrink-0 font-mono text-xl text-slate-400 transition-transform duration-300 group-open:rotate-45"
aria-hidden="true"
@@ -44,7 +18,7 @@ export const Faq: React.FC = () => (
</span>
</summary>
<p className="m-0 mt-4 font-sans text-base leading-relaxed text-slate-500 md:text-lg">
{item.a}
{item.answer}
</p>
</details>
))}