import { Button } from "@/components/ui/button";
import { Card, CardContent } from "@/components/ui/card";
import { Input } from "@/components/ui/input";
import { Label } from "@/components/ui/label";
import { Separator } from "@/components/ui/separator";
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs";
import {
DropdownMenu,
DropdownMenuContent,
DropdownMenuItem,
DropdownMenuTrigger,
DropdownMenuLabel,
DropdownMenuSeparator,
DropdownMenuGroup
} from "@/components/ui/dropdown-menu";
import {
CheckCircle2,
ArrowRight,
Crosshair,
ChevronDown
} from "lucide-react";
import { useState, useEffect } from "react";
import { useToast } from "@/hooks/use-toast";
import { Link, useLocation } from "react-router-dom";
import { verticalCategories } from "@/data/verticals";
const Index = () => {
const { toast } = useToast();
const [isSubmitting, setIsSubmitting] = useState(false);
const [step, setStep] = useState(1);
const location = useLocation();
useEffect(() => {
if (location.hash) {
const id = location.hash.replace('#', '');
const element = document.getElementById(id);
if (element) {
element.scrollIntoView({ behavior: 'smooth' });
}
}
}, [location]);
const handleSubmit = (e: React.FormEvent) => {
e.preventDefault();
setIsSubmitting(true);
const formData = new FormData(e.currentTarget);
const formValues = {
firstName: formData.get("firstName") as string,
lastName: formData.get("lastName") as string,
email: formData.get("email") as string,
phone: formData.get("phone") as string,
address: formData.get("address") as string,
vertical: formData.get("vertical") as string,
};
const trackingPayload = {
type: "external_form_submission",
timestamp: Date.now(),
formId: "Trial Order Form",
formData: {
first_name: formValues.firstName,
last_name: formValues.lastName,
email: formValues.email,
phone: formValues.phone,
address: formValues.address,
"contact.target_vertical": formValues.vertical,
},
formLabels: {
first_name: "First Name",
last_name: "Last Name",
email: "Email",
phone: "Phone",
address: "Address",
"contact.target_vertical": "Target Vertical",
},
url: window.location.href,
title: document.title,
path: window.location.pathname,
userAgent: navigator.userAgent,
trackingId: "tk_99ee12163e784a2e925a7c008df8452a",
locationId: "WqNzmhoGZrjHfvhU3i6z",
sessionId: crypto.randomUUID(),
properties: {
deviceType: /Mobile|Android|iPhone/i.test(navigator.userAgent) ? "mobile" : "desktop",
},
};
fetch("https://backend.leadconnectorhq.com/external-tracking/events", {
method: "POST",
headers: { "Content-Type": "application/json", version: "2021-07-28" },
body: JSON.stringify(trackingPayload),
}).catch(() => {});
// Simulate form submission
setTimeout(() => {
setIsSubmitting(false);
setStep(1);
toast({
title: "Trial Requested",
description: "Your luxury lead trial setup is in progress.",
});
(e.target as HTMLFormElement).reset();
}, 1000);
};
// Verticals data is now imported from @/data/verticals
return (
{/* Navigation */}
{/* Hero Section */}
Live Signals Active in LA & San Diego
Contractor Project Intelligence
for LA's Luxury Trade
We research, verify, and rank active remodeling projects across Los Angeles — so trade vendors know exactly where work is happening and who's doing it. Every report covers active permitted projects, verified contractor records, and AI-ranked activity signals. Delivered as a CSV — ready for your CRM or outreach platform.
No credit card required
Only Top Tier Operators
Showing all three growth signals right now in Los Angeles and Greater Southern California.
Direct Lines & Names
Your rep gets a verified name, direct contact info, and a pitch angle already written based on Lead Signals.
Stop Cleaning Data
Is your team cleaning and enriching a poor lead spreadsheet — should they not be booking meetings today!
Every connection we build starts from the same question your SDR should be asking before every call: is this business actively spending money right now? We cross-reference live hiring signals, certification databases, licensing boards, and website intelligence to find the operators showing two or three buying signals simultaneously. No static databases. No recycled Apollo exports. Fresh, scored, and delivered this week.