"use client"; import { useState } from "react"; import { CircleAlert, CircleCheck } from "lucide-react"; import { Alert, AlertDescription, AlertTitle } from "@/components/ui/alert"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Label } from "@/components/ui/label"; import { NativeSelect, NativeSelectOption, } from "@/components/ui/native-select"; import { RadioGroup, RadioGroupItem } from "@/components/ui/radio-group"; import { Textarea } from "@/components/ui/textarea"; import { business, links } from "@/lib/site"; import { trackEvent } from "@/lib/analytics"; const FORM_ACTION = "https://form.taxi/s/es9ddva1"; const devices = ["Laptop", "Desktop PC", "Mac", "Chromebook", "PlayStation or Xbox", "Other"]; const problems = [ "Won't turn on or won't start", "Cracked or broken screen", "Running slow / upgrade", "Virus, pop-ups or scam", "Battery or charging", "Moving files to a new computer", "Windows 10 / Windows 11", "Business IT support", "Something else", ]; const contactMethods = ["Call", "Text", "Email"]; function Field({ children }) { return
{children}
; } // Submits to form.taxi with JavaScript for an inline success message; without // JavaScript the form still posts normally. export default function ContactForm() { const [status, setStatus] = useState("idle"); async function handleSubmit(event) { event.preventDefault(); setStatus("sending"); try { const response = await fetch(FORM_ACTION, { method: "POST", headers: { Accept: "application/json" }, body: new FormData(event.currentTarget), }); const result = await response.json().catch(() => ({})); if (!response.ok || !result.success) throw new Error("Submit failed"); setStatus("sent"); trackEvent("submit_quote_form"); } catch { setStatus("error"); } } if (status === "sent") { return ( ); } return (

Get a quote

Tell me what's going on and I'll get back to you, usually the same day during business hours.

Best way to reach you {contactMethods.map((method) => (
))}
{devices.map((device) => ( {device} ))} Choose one {problems.map((problem) => ( {problem} ))}