feat: rebuild mintel.me as a single-page freelance site

The site now presents one freelance developer on one page: hero, introduction,
four typical cases (developer for a product, make an app reliable, automate a
process, a website) with what you get, how it runs and what it costs, a
process automation section, technology and project fit, how I work, two live
references, questions and contact.

- Hero and closing headline are drawn from running binary digits.
- Each case explains its four steps with an animated drawing; the automation
  section shows example workflows with work travelling between systems; a
  pipeline run shows what a test catches before a release.
- Contact is one email address, kept in parts and assembled in the browser so
  it never appears in the page source (src/domain/email.ts, spec first).
- Imprint and privacy pages added.
- The old site (blog, case studies, contact form, fixed-price pages, video
  rendering and related scripts) is removed. Its URLs redirect to the homepage.
- The deploy smoke test checks the legal pages and the redirects instead of
  the removed case study.
- Dev scripts use docker compose v2.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-03 22:33:06 +02:00
co-authored by Claude Opus 5.5
parent 4eb663f42a
commit fa40fefe2f
781 changed files with 4925 additions and 55137 deletions
+5 -16
View File
@@ -19,25 +19,14 @@ const newsreader = Newsreader({
display: "swap",
});
const DESCRIPTION =
"Senior engineer for teams that build fast with AI and don't want chaos. Strong in design and frontend, provably clean in architecture and tests. Remote, booked in weekly capacity blocks.";
export const metadata: Metadata = {
title: {
default: "Marc Mintel — Senior engineer for AI-built software",
default: "Marc Mintel — Senior developer for web apps and websites",
template: "%s | Marc Mintel",
},
description: DESCRIPTION,
description:
"Senior developer for web apps, interfaces and websites. Book weekly hours for your product, get an unreliable app back on track, or have a website built for you.",
metadataBase: new URL("https://mintel.me"),
openGraph: {
type: "website",
siteName: "Marc Mintel",
title: "Marc Mintel — Senior engineer for AI-built software",
description: DESCRIPTION,
url: "https://mintel.me",
locale: "en_US",
},
twitter: { card: "summary_large_image" },
icons: {
icon: "/favicon.svg",
},
@@ -51,9 +40,9 @@ export default function RootLayout({
return (
<html
lang="en"
className={`${inter.variable} ${jetbrainsMono.variable} ${newsreader.variable}`}
className={`${inter.variable} ${newsreader.variable} ${jetbrainsMono.variable}`}
>
<body className="min-h-screen bg-bg font-sans text-fg antialiased">
<body className="min-h-screen bg-white">
<Header />
<main>{children}</main>
<Footer />