Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 1b14ae3492 | |||
| 4e762f762d |
@@ -13,6 +13,7 @@ import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatin
|
|||||||
import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
|
import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
|
||||||
import TestimonialCardTwelve from '@/components/sections/testimonial/TestimonialCardTwelve';
|
import TestimonialCardTwelve from '@/components/sections/testimonial/TestimonialCardTwelve';
|
||||||
import Input from '@/components/form/Input';
|
import Input from '@/components/form/Input';
|
||||||
|
import { AlertCircle, Loader2 } from "lucide-react";
|
||||||
|
|
||||||
export default function LandingPage() {
|
export default function LandingPage() {
|
||||||
const [searchQuery, setSearchQuery] = useState("");
|
const [searchQuery, setSearchQuery] = useState("");
|
||||||
@@ -21,6 +22,7 @@ export default function LandingPage() {
|
|||||||
const [error, setError] = useState(null);
|
const [error, setError] = useState(null);
|
||||||
|
|
||||||
const handleSearch = useCallback(async () => {
|
const handleSearch = useCallback(async () => {
|
||||||
|
if (!searchQuery.trim()) return;
|
||||||
setLoading(true);
|
setLoading(true);
|
||||||
setError(null);
|
setError(null);
|
||||||
try {
|
try {
|
||||||
@@ -53,9 +55,8 @@ export default function LandingPage() {
|
|||||||
<NavbarLayoutFloatingOverlay
|
<NavbarLayoutFloatingOverlay
|
||||||
navItems={[
|
navItems={[
|
||||||
{ name: "How it works", id: "#features" },
|
{ name: "How it works", id: "#features" },
|
||||||
{ name: "Pricing", id: "#pricing" },
|
|
||||||
{ name: "Agents", id: "#metrics" },
|
{ name: "Agents", id: "#metrics" },
|
||||||
{ name: "Blog", id: "#blog" },
|
{ name: "FAQ", id: "#faq" },
|
||||||
]}
|
]}
|
||||||
brandName="No-Site Search"
|
brandName="No-Site Search"
|
||||||
/>
|
/>
|
||||||
@@ -66,22 +67,32 @@ export default function LandingPage() {
|
|||||||
background={{ variant: "plain" }}
|
background={{ variant: "plain" }}
|
||||||
title="Find local businesses without websites"
|
title="Find local businesses without websites"
|
||||||
description="Find local businesses without websites and deploy AI agents to fill your pipeline — automatically."
|
description="Find local businesses without websites and deploy AI agents to fill your pipeline — automatically."
|
||||||
buttons={[{ text: "Get Started", href: "#pricing" }]}
|
buttons={[{ text: "Get Started", href: "#contact" }]}
|
||||||
imageSrc="http://img.b2bpic.net/free-photo/employee-uses-phone-app-with-greenscreen_482257-81843.jpg"
|
imageSrc="http://img.b2bpic.net/free-photo/employee-uses-phone-app-with-greenscreen_482257-81843.jpg"
|
||||||
imageAlt="Dashboard showing business leads"
|
imageAlt="Dashboard showing business leads"
|
||||||
/>
|
/>
|
||||||
<div className="px-6 py-8 flex flex-col items-center gap-4">
|
<div className="px-6 py-12 flex flex-col items-center gap-4 w-full max-w-4xl mx-auto">
|
||||||
<div className="flex w-full max-w-md gap-2">
|
<div className="flex w-full max-w-md gap-2 p-2 bg-white/50 dark:bg-black/20 backdrop-blur rounded-lg border border-white/20 shadow-xl">
|
||||||
<Input
|
<Input
|
||||||
value={searchQuery}
|
value={searchQuery}
|
||||||
onChange={setSearchQuery}
|
onChange={setSearchQuery}
|
||||||
placeholder="Search for leads..."
|
placeholder="Search for leads (e.g. 'plumbers in NY')..."
|
||||||
|
className="flex-1 bg-transparent border-none focus:ring-0"
|
||||||
/>
|
/>
|
||||||
<button onClick={handleSearch} className="px-4 py-2 bg-primary text-white rounded" disabled={loading}>
|
<button
|
||||||
{loading ? "Searching..." : "Search"}
|
onClick={handleSearch}
|
||||||
|
className="flex items-center gap-2 px-6 py-3 bg-primary text-white rounded-md hover:opacity-90 transition-all disabled:opacity-50"
|
||||||
|
disabled={loading}
|
||||||
|
>
|
||||||
|
{loading ? <Loader2 className="w-4 h-4 animate-spin" /> : "Search"}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
{error && <p className="text-red-500 text-sm">{error}</p>}
|
{error && (
|
||||||
|
<div className="flex items-center gap-2 text-red-500 bg-red-50 px-4 py-2 rounded-md animate-in fade-in">
|
||||||
|
<AlertCircle className="w-4 h-4" />
|
||||||
|
<span className="text-sm">{error}</span>
|
||||||
|
</div>
|
||||||
|
)}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -164,7 +175,8 @@ export default function LandingPage() {
|
|||||||
<FooterBaseReveal
|
<FooterBaseReveal
|
||||||
logoText="No-Site Search"
|
logoText="No-Site Search"
|
||||||
columns={[
|
columns={[
|
||||||
{ title: "Company", items: [{ label: "How it works", href: "#features" }, { label: "Pricing", href: "#pricing" }] },
|
{ title: "Product", items: [{ label: "Features", href: "#features" }, { label: "Metrics", href: "#metrics" }] },
|
||||||
|
{ title: "Support", items: [{ label: "FAQ", href: "#faq" }, { label: "Contact", href: "#contact" }] },
|
||||||
]}
|
]}
|
||||||
copyrightText="Copyright © 2026 No-Site Search. All rights reserved."
|
copyrightText="Copyright © 2026 No-Site Search. All rights reserved."
|
||||||
/>
|
/>
|
||||||
|
|||||||
Reference in New Issue
Block a user