// contact.jsx — form, Calendly card, social links
const { useState: useStateC, useEffect: useEffectC } = React;
function Contact({ setRoute }) {
const [form, setForm] = useStateC({ name: "", email: "", subject: "Project enquiry", message: "" });
const [status, setStatus] = useStateC("idle"); // idle | sending | sent
const mobile = useMobile();
const submit = async (e) => {
e.preventDefault();
if (!form.email.includes("@") || form.message.length < 10) return;
setStatus("sending");
try {
const res = await fetch("https://formspree.io/f/xrejpezr", {
method: "POST",
headers: { "Content-Type": "application/json", "Accept": "application/json" },
body: JSON.stringify(form),
});
setStatus(res.ok ? "sent" : "idle");
} catch {
setStatus("idle");
}
};
return (
— Get in touch
Say{" "}
hello.
Or
just lurk.
The fastest way to start a project is the order form. But if you've got
a custom brief, want to chat first, or just want to say hi — drop me a note.
{/* ─── left rail ─── */}
{/* ─── right: form ─── */}
);
}
const inputStyleC = {
width: "100%",
padding: "14px 16px",
borderRadius: "var(--radius-sm)",
background: "var(--glass)",
border: "1px solid var(--line-2)",
color: "var(--ink)",
fontFamily: "var(--font-sans)",
fontSize: 15,
outline: "none",
};
function Field({ label, hint, required, children }) {
return (
);
}
/* ─── Calendly card ─── */
function CalendlyCard() {
return (
{/* prism bloom */}
— Book a call
15 minutes,
no pitch.
Walk me through what you've got, I'll tell you whether I can help and what it'd cost.
{/* mini calendar preview */}
);
}
function CalendarPreview() {
// build a faux week strip
const days = ["MON", "TUE", "WED", "THU", "FRI"];
const dates = [12, 13, 14, 15, 16];
const slots = [false, true, true, true, false]; // availability dots
return (
{days.map((d, i) => (
))}
);
}
/* ─── email card ─── */
function EmailCard() {
return (
Email · faster than carrier pigeon
hello@visimatic.com
);
}
/* ─── socials ─── */
function SocialsCard() {
const socials = [
{ name: "Instagram", handle: "@visimatic_", icon: "ig", url: "https://www.instagram.com/visimatic_/" },
{ name: "Dribbble", handle: "/visimatic", icon: "dr", url: "https://dribbble.com/visimatic" },
];
return (
);
}
function SocialIcon({ kind }) {
const c = "var(--ink-2)";
if (kind === "ig") return ;
if (kind === "dr") return ;
return null;
}
Object.assign(window, { Contact });