From 0482b780f470f58b86212266f0c3fec501fe5bda Mon Sep 17 00:00:00 2001 From: Jan Wagner Date: Sun, 16 Aug 2026 11:12:40 +0200 Subject: [PATCH] feat(site): tighten proof, contact, and inquiry delivery Lead with Batch on the home page, drop the product changelog, add a domain note, and stop reporting success when SMTP fails. Co-authored-by: Cursor --- package.json | 2 +- src/app/[lang]/contact/page.tsx | 28 ++++++++- src/app/[lang]/layout.tsx | 4 +- src/app/[lang]/page.tsx | 57 ++++++------------ src/app/[lang]/work/page.tsx | 56 +++++++++++------- src/app/globals.css | 20 +++++++ src/components/contact-form.tsx | 61 ++++++++++++++++++- src/components/site-footer.tsx | 6 +- src/components/site-header.tsx | 5 +- src/components/work-preview.tsx | 101 ++++++++++++++++++++++++++++++++ src/content/legal.ts | 4 +- src/content/notes.ts | 25 +++++++- src/content/offer-ids.ts | 6 ++ src/content/offers.ts | 8 +++ src/content/projects.ts | 5 ++ src/i18n/dictionaries.ts | 24 +++++++- src/lib/contact/actions.ts | 17 +++--- src/lib/contact/deliver.test.ts | 53 +++++++++++++++++ src/lib/contact/deliver.ts | 23 ++++++++ src/lib/contact/mail.ts | 1 + src/lib/contact/schema.test.ts | 21 +++++++ src/lib/contact/schema.ts | 13 ++++ src/lib/contact/store.ts | 9 ++- 23 files changed, 465 insertions(+), 84 deletions(-) create mode 100644 src/components/work-preview.tsx create mode 100644 src/content/offer-ids.ts create mode 100644 src/lib/contact/deliver.test.ts create mode 100644 src/lib/contact/deliver.ts diff --git a/package.json b/package.json index 6725b1b..3189e1b 100644 --- a/package.json +++ b/package.json @@ -7,7 +7,7 @@ "build": "next build", "start": "next start", "lint": "eslint", - "test": "node --experimental-strip-types --test src/i18n/routes.test.ts src/lib/contact/schema.test.ts" + "test": "node --experimental-strip-types --test src/i18n/routes.test.ts src/lib/contact/schema.test.ts src/lib/contact/deliver.test.ts" }, "dependencies": { "next": "16.3.1", diff --git a/src/app/[lang]/contact/page.tsx b/src/app/[lang]/contact/page.tsx index 10e23dc..cf6aa75 100644 --- a/src/app/[lang]/contact/page.tsx +++ b/src/app/[lang]/contact/page.tsx @@ -1,8 +1,12 @@ import { ContactForm } from "@/components/contact-form"; +import { isOfferId } from "@/content/offer-ids"; import { getOffers } from "@/content/offers"; +import { site } from "@/content/site"; import { getDictionary } from "@/i18n/dictionaries"; +import { publicPath } from "@/i18n/routes"; import { pageMetadata } from "@/lib/metadata"; import { requireLocale } from "@/lib/locale"; +import Link from "next/link"; export async function generateMetadata({ params }: PageProps<"/[lang]/contact">) { const locale = requireLocale((await params).lang); @@ -10,10 +14,16 @@ export async function generateMetadata({ params }: PageProps<"/[lang]/contact">) return pageMetadata(locale, "contact", dict.contact.title, dict.contact.lede); } -export default async function ContactPage({ params }: PageProps<"/[lang]/contact">) { +export default async function ContactPage({ + params, + searchParams, +}: PageProps<"/[lang]/contact">) { const locale = requireLocale((await params).lang); const dict = getDictionary(locale); const offers = getOffers(locale); + const topicParam = (await searchParams).topic; + const topicValue = Array.isArray(topicParam) ? topicParam[0] : topicParam; + const defaultTopic = topicValue && isOfferId(topicValue) ? topicValue : undefined; return (
@@ -21,17 +31,29 @@ export default async function ContactPage({ params }: PageProps<"/[lang]/contact

{dict.contact.kicker}

{dict.contact.title}

{dict.contact.lede}

+

{dict.contact.reply}

+

+ + {dict.contact.emailDirect}: {site.email} + +

- +