62f2fb7742
- New "Tisch" section replaces the old projects block on the home page - Objects: project cards from Directus (flip on tap, link to detail page), thesis ticket with countdown, server card, currently-reading book from Hardcover (with skeleton), polaroid photo, sticker - Desktop: Framer Motion drag with momentum, elastic table edges, tilt that follows throw velocity, bring-to-front, "Tidy up" and "Mess it up" - Mobile: card deck, swipe the top card away (distance or velocity), prev/next buttons, live counter, tap to flip - Both layouts are server rendered and switched by CSS, so content is visible without JavaScript and nothing jumps on hydration - Taps after a drag no longer flip cards - New named colors polaroid/bookcover instead of raw hex classes - Texts in de/en, i18n key check extended Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
108 lines
3.2 KiB
TypeScript
108 lines
3.2 KiB
TypeScript
import Header from "../components/Header.server";
|
|
import Hero from "../components/Hero";
|
|
import TischSection from "../components/tisch/TischSection";
|
|
import ScrollFadeIn from "../components/ScrollFadeIn";
|
|
import Script from "next/script";
|
|
import {
|
|
getAboutTranslations,
|
|
getContactTranslations,
|
|
getFooterTranslations,
|
|
} from "@/lib/translations-loader";
|
|
import {
|
|
AboutClient,
|
|
ContactClient,
|
|
FooterClient,
|
|
} from "../components/ClientWrappers";
|
|
|
|
interface HomePageServerProps {
|
|
locale: string;
|
|
}
|
|
|
|
export default async function HomePageServer({ locale }: HomePageServerProps) {
|
|
// Parallel laden aller Translations (hero translations handled by Hero server component)
|
|
const [aboutT, contactT, footerT] = await Promise.all([
|
|
getAboutTranslations(locale),
|
|
getContactTranslations(locale),
|
|
getFooterTranslations(locale),
|
|
]);
|
|
|
|
return (
|
|
<div className="min-h-screen">
|
|
<Script
|
|
id={"structured-data-person"}
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{
|
|
__html: JSON.stringify({
|
|
"@context": "https://schema.org",
|
|
"@type": "Person",
|
|
name: "Dennis Konkol",
|
|
alternateName: ["dk0", "denshooter"],
|
|
url: "https://dk0.dev",
|
|
jobTitle: "Software Engineer",
|
|
description:
|
|
locale === "de"
|
|
? "Software Engineer & Webentwickler in Osnabrück. Webentwicklung, Fullstack-Apps, Docker, Next.js, Flutter."
|
|
: "Software Engineer & Web Developer in Osnabrück, Germany. Web development, fullstack apps, Docker, Next.js, Flutter.",
|
|
address: {
|
|
"@type": "PostalAddress",
|
|
addressLocality: "Osnabrück",
|
|
addressRegion: "Niedersachsen",
|
|
addressCountry: "DE",
|
|
},
|
|
knowsAbout: [
|
|
"Webentwicklung",
|
|
"Web Development",
|
|
"Next.js",
|
|
"React",
|
|
"TypeScript",
|
|
"Flutter",
|
|
"Docker",
|
|
"DevOps",
|
|
"Self-Hosting",
|
|
"CI/CD",
|
|
"Fullstack Development",
|
|
"Softwareentwicklung",
|
|
"Informatik",
|
|
],
|
|
sameAs: [
|
|
"https://github.com/Denshooter",
|
|
"https://linkedin.com/in/dkonkol",
|
|
],
|
|
}),
|
|
}}
|
|
/>
|
|
<Script
|
|
id={"structured-data-website"}
|
|
type="application/ld+json"
|
|
dangerouslySetInnerHTML={{
|
|
__html: JSON.stringify({
|
|
"@context": "https://schema.org",
|
|
"@type": "WebSite",
|
|
name: "Dennis Konkol",
|
|
alternateName: "dk0.dev",
|
|
url: "https://dk0.dev",
|
|
inLanguage: ["de", "en"],
|
|
}),
|
|
}}
|
|
/>
|
|
<Header locale={locale} />
|
|
<main className="relative">
|
|
<Hero locale={locale} />
|
|
<TischSection locale={locale} />
|
|
|
|
<ScrollFadeIn>
|
|
<AboutClient locale={locale} translations={aboutT} />
|
|
</ScrollFadeIn>
|
|
|
|
|
|
<ScrollFadeIn>
|
|
<ContactClient locale={locale} translations={contactT} />
|
|
</ScrollFadeIn>
|
|
</main>
|
|
<ScrollFadeIn>
|
|
<FooterClient locale={locale} translations={footerT} />
|
|
</ScrollFadeIn>
|
|
</div>
|
|
);
|
|
}
|