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>
55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import type { Metadata } from "next";
|
|
import { Inter, JetBrains_Mono, Newsreader } from "next/font/google";
|
|
import { Analytics } from "@/src/components/Analytics";
|
|
import { Footer } from "@/src/components/Footer";
|
|
import { Header } from "@/src/components/Header";
|
|
import { InteractiveElements } from "@/src/components/InteractiveElements";
|
|
import "./globals.css";
|
|
|
|
const inter = Inter({ subsets: ["latin"], variable: "--font-inter" });
|
|
const jetbrainsMono = JetBrains_Mono({
|
|
subsets: ["latin"],
|
|
variable: "--font-jetbrains-mono",
|
|
display: "swap",
|
|
});
|
|
const newsreader = Newsreader({
|
|
subsets: ["latin"],
|
|
variable: "--font-newsreader",
|
|
style: "italic",
|
|
display: "swap",
|
|
});
|
|
|
|
export const metadata: Metadata = {
|
|
title: {
|
|
default: "Marc Mintel — Senior developer for web apps and websites",
|
|
template: "%s | Marc Mintel",
|
|
},
|
|
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"),
|
|
icons: {
|
|
icon: "/favicon.svg",
|
|
},
|
|
};
|
|
|
|
export default function RootLayout({
|
|
children,
|
|
}: {
|
|
children: React.ReactNode;
|
|
}) {
|
|
return (
|
|
<html
|
|
lang="en"
|
|
className={`${inter.variable} ${newsreader.variable} ${jetbrainsMono.variable}`}
|
|
>
|
|
<body className="min-h-screen bg-white">
|
|
<Header />
|
|
<main>{children}</main>
|
|
<Footer />
|
|
<InteractiveElements />
|
|
<Analytics />
|
|
</body>
|
|
</html>
|
|
);
|
|
}
|