import { useRef, useState } from "react"; import { usePageMeta } from "@/hooks/use-page-meta"; import { CONTACT_LIMITS, ContactSendError, sendContactMessage } from "@/lib/contact"; import "./unterseiten.css"; type Rueckmeldung = { art: "erfolg" | "fehler"; titel: string; text: string }; const Contact = () => { usePageMeta( "Projekt besprechen", "Beschreiben Sie Ihr Vorhaben in zwei Sätzen. WEBklar meldet sich spätestens am nächsten Werktag." ); const [isSubmitting, setIsSubmitting] = useState(false); const [rueckmeldung, setRueckmeldung] = useState(null); const statusRef = useRef(null); const [formData, setFormData] = useState({ name: "", email: "", company: "", message: "", website: "", }); const handleChange = ( e: React.ChangeEvent ) => { setFormData((prev) => ({ ...prev, [e.target.name]: e.target.value, })); }; const handleSubmit = async (e: React.FormEvent) => { e.preventDefault(); if (isSubmitting) return; setIsSubmitting(true); setRueckmeldung(null); try { await sendContactMessage(formData); setRueckmeldung({ art: "erfolg", titel: "Nachricht gesendet.", text: "Wir melden uns spätestens am nächsten Werktag bei Ihnen.", }); setFormData({ name: "", email: "", company: "", message: "", website: "" }); } catch (fehler) { setRueckmeldung({ art: "fehler", titel: "Die Nachricht konnte nicht gesendet werden.", text: fehler instanceof ContactSendError && fehler.tooMany ? "Es kamen gerade zu viele Anfragen. Bitte versuchen Sie es in ein paar Minuten noch einmal oder schreiben Sie uns direkt per E-Mail." : "Bitte versuchen Sie es noch einmal oder schreiben Sie uns direkt per E-Mail.", }); } finally { setIsSubmitting(false); // Rückmeldung ins Bild holen, falls sie unter dem Bildschirmrand erscheint requestAnimationFrame(() => statusRef.current?.scrollIntoView?.({ block: "nearest" })); } }; return (

Projekt besprechen

Zwei Sätze genügen. Wir melden uns spätestens am nächsten Werktag. Im ersten Gespräch klären wir in 15 Minuten, ob und wie wir helfen können – kostenlos und unverbindlich.

Kontaktformular