diff --git a/src/app/[locale]/about-hendrik/page.tsx b/src/app/[locale]/about-hendrik/page.tsx new file mode 100644 index 00000000..3b71a777 --- /dev/null +++ b/src/app/[locale]/about-hendrik/page.tsx @@ -0,0 +1,10 @@ +import { redirect } from 'next/navigation' + +export default async function AboutHendrikPage({ + params, +}: { + params: Promise<{ locale: string }> +}) { + const { locale } = await params + redirect(`/${locale}/employees/hendrik`) +} diff --git a/src/app/[locale]/employees/[slug]/page.tsx b/src/app/[locale]/employees/[slug]/page.tsx new file mode 100644 index 00000000..5ebd4ede --- /dev/null +++ b/src/app/[locale]/employees/[slug]/page.tsx @@ -0,0 +1,143 @@ +import Image from 'next/image' +import { notFound } from 'next/navigation' +import type { Metadata } from 'next' +import teamDataEn from '@/data/en/team.json' +import teamDataDe from '@/data/de/team.json' + +interface TeamMember { + id: string + firstName: string + lastName: string + bio: string + picture: string + role: string + socials?: Array<{ name: string; link: string; icon: string }> +} + +function getMember(locale: string, slug: string): TeamMember | undefined { + const teamData = locale === 'de' ? teamDataDe : teamDataEn + return teamData.find((member) => member.id === slug) +} + +export async function generateStaticParams() { + const slugs = Array.from(new Set([...teamDataEn, ...teamDataDe].map((member) => member.id))) + + return ['en', 'de'].flatMap((locale) => + slugs.map((slug) => ({ + locale, + slug, + })) + ) +} + +export async function generateMetadata({ + params, +}: { + params: Promise<{ locale: string; slug: string }> +}): Promise { + const { locale, slug } = await params + const member = getMember(locale, slug) ?? getMember('en', slug) + + if (!member) { + return { + title: 'Employee Not Found - Open Elements', + } + } + + return { + title: `${member.firstName} ${member.lastName} - Open Elements`, + description: member.bio, + openGraph: { + title: `${member.firstName} ${member.lastName} - Open Elements`, + description: member.bio, + images: [ + { + url: member.picture, + width: 800, + height: 800, + alt: `${member.firstName} ${member.lastName}`, + }, + ], + }, + } +} + +export default async function EmployeePage({ + params, +}: { + params: Promise<{ locale: string; slug: string }> +}) { + const { locale, slug } = await params + const member = getMember(locale, slug) ?? getMember('en', slug) + + if (!member) { + notFound() + } + + return ( +
+ Circles + Arrow + +
+
+

+ {member.firstName} {member.lastName} +

+

{member.role}

+
+ +
+
+ background + employee +
+
+
{member.bio}
+ {member.socials && member.socials.length > 0 ? ( +
+ {member.socials.map((social) => ( + + + + ))} +
+ ) : null} +
+
+
+
+ ) +} diff --git a/src/components/about/TeamCard.tsx b/src/components/about/TeamCard.tsx index 816568f1..adc8c38e 100644 --- a/src/components/about/TeamCard.tsx +++ b/src/components/about/TeamCard.tsx @@ -1,5 +1,5 @@ import Image from 'next/image' -import Link from 'next/link' +import { Link } from '@/i18n/routing' interface TeamMember { id: string diff --git a/src/data/de/team.json b/src/data/de/team.json index 3f1c1429..b13f4328 100644 --- a/src/data/de/team.json +++ b/src/data/de/team.json @@ -3,7 +3,7 @@ "id": "hendrik", "firstName": "Hendrik", "lastName": "Ebbers", - "link": "/about-hendrik/", + "link": "/employees/hendrik", "bio": "Hendrik ist der Gründer von Open Elements. Als Java Champion und Mitglied verschiedener JSR-Expertengruppen und JavaOne-Stars verkörpert er die Leidenschaft und das Know-how, das unsere Firma ausmacht. Er engagiert sich aktiv in der Eclipse JakartaEE und Eclipse Adoptium Working Groups und ist zudem Mitglied im Board of Directors der Eclipse Foundation.", "picture": "/team/hendrik.jpg", "role": "Founder Open Elements", diff --git a/src/data/en/team.json b/src/data/en/team.json index 4fc123f4..7f4ddbcd 100644 --- a/src/data/en/team.json +++ b/src/data/en/team.json @@ -3,7 +3,7 @@ "id": "hendrik", "firstName": "Hendrik", "lastName": "Ebbers", - "link": "/about-hendrik/", + "link": "/employees/hendrik", "bio": "Hendrik Ebbers is the founder of Open Elements. He is a Java champion, a member of JSR expert groups and a JavaOne rockstar. Hendrik is a member of the Eclipse JakartaEE working group (WG) and the Eclipse Adoptium WG. In addition, Hendrik Ebbers is a member of the Board of Directors of the Eclipse Foundation.", "picture": "/team/hendrik.jpg", "role": "Founder Open Elements",