4 Commits

Author SHA1 Message Date
961894778f Update src/app/page.tsx 2026-03-06 06:05:55 +00:00
cdc373f255 Merge version_6 into main
Merge version_6 into main
2026-03-06 04:57:35 +00:00
3e6bf968af Update src/app/page.tsx 2026-03-06 04:57:31 +00:00
bb70a5d116 Merge version_5 into main
Merge version_5 into main
2026-03-06 04:53:20 +00:00

View File

@@ -8,10 +8,10 @@ import FeatureBento from '@/components/sections/feature/FeatureBento';
import ProductCardFour from '@/components/sections/product/ProductCardFour'; import ProductCardFour from '@/components/sections/product/ProductCardFour';
import SocialProofOne from '@/components/sections/socialProof/SocialProofOne'; import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
import FaqBase from '@/components/sections/faq/FaqBase'; import FaqBase from '@/components/sections/faq/FaqBase';
import ContactSplit from '@/components/sections/contact/ContactSplit';
import FooterSimple from '@/components/sections/footer/FooterSimple'; import FooterSimple from '@/components/sections/footer/FooterSimple';
import { Shield, Zap, Clock, AlertCircle, CheckCircle, Users, Sparkles, HelpCircle } from "lucide-react"; import { Shield, Zap, Clock, AlertCircle, CheckCircle, Users, Sparkles, HelpCircle } from "lucide-react";
import { useState } from "react"; import { useState, useRef } from "react";
import Input from '@/components/form/Input';
const navItems = [ const navItems = [
{ name: "Problem", id: "problem" }, { name: "Problem", id: "problem" },
@@ -35,6 +35,7 @@ interface WaitlistFormData {
export default function LandingPage() { export default function LandingPage() {
const [waitlistData, setWaitlistData] = useState<WaitlistFormData[]>([]); const [waitlistData, setWaitlistData] = useState<WaitlistFormData[]>([]);
const [formStatus, setFormStatus] = useState<'idle' | 'success' | 'error'>('idle'); const [formStatus, setFormStatus] = useState<'idle' | 'success' | 'error'>('idle');
const contactFormRef = useRef<HTMLDivElement>(null);
const handleWaitlistSubmit = (formData: WaitlistFormData) => { const handleWaitlistSubmit = (formData: WaitlistFormData) => {
try { try {
@@ -48,6 +49,19 @@ export default function LandingPage() {
} }
}; };
const handleJoinWaitlistClick = () => {
if (contactFormRef.current) {
contactFormRef.current.scrollIntoView({ behavior: 'smooth' });
// Focus on the email input after scroll
setTimeout(() => {
const emailInput = contactFormRef.current?.querySelector('input[type="email"]') as HTMLInputElement;
if (emailInput) {
emailInput.focus();
}
}, 300);
}
};
return ( return (
<ThemeProvider <ThemeProvider
defaultButtonVariant="text-stagger" defaultButtonVariant="text-stagger"
@@ -66,7 +80,7 @@ export default function LandingPage() {
brandName="Clearance" brandName="Clearance"
navItems={navItems} navItems={navItems}
button={{ button={{
text: "Join Waitlist", href: "#contact" text: "Join Waitlist", onClick: handleJoinWaitlistClick
}} }}
/> />
</div> </div>
@@ -85,7 +99,7 @@ export default function LandingPage() {
{ value: "5min", label: "Setup Time" } { value: "5min", label: "Setup Time" }
]} ]}
enableKpiAnimation={true} enableKpiAnimation={true}
buttons={[{ text: "Join Waitlist", href: "#contact" }]} buttons={[{ text: "Join Waitlist", onClick: handleJoinWaitlistClick }]}
imageSrc={heroImage} imageSrc={heroImage}
imageAlt="Clearance fintech dashboard interface" imageAlt="Clearance fintech dashboard interface"
mediaAnimation="slide-up" mediaAnimation="slide-up"
@@ -233,7 +247,7 @@ export default function LandingPage() {
/> />
</div> </div>
<div id="contact" data-section="contact"> <div id="contact" data-section="contact" ref={contactFormRef}>
<WaitlistFormSection onSubmit={handleWaitlistSubmit} formStatus={formStatus} /> <WaitlistFormSection onSubmit={handleWaitlistSubmit} formStatus={formStatus} />
</div> </div>
@@ -311,14 +325,12 @@ function WaitlistFormSection({ onSubmit, formStatus }: { onSubmit: (data: Waitli
<label htmlFor="email" className="block text-sm font-medium mb-2"> <label htmlFor="email" className="block text-sm font-medium mb-2">
Email Address <span className="text-primary-cta">*</span> Email Address <span className="text-primary-cta">*</span>
</label> </label>
<input <Input
type="email"
id="email"
value={email} value={email}
onChange={(e) => setEmail(e.target.value)} onChange={setEmail}
type="email"
placeholder="your@email.com" placeholder="your@email.com"
required required
className="w-full px-4 py-2 rounded-lg border border-accent/30 bg-background text-foreground placeholder-foreground/50 focus:outline-none focus:border-primary-cta focus:ring-1 focus:ring-primary-cta"
/> />
</div> </div>
@@ -326,13 +338,11 @@ function WaitlistFormSection({ onSubmit, formStatus }: { onSubmit: (data: Waitli
<label htmlFor="instagram" className="block text-sm font-medium mb-2"> <label htmlFor="instagram" className="block text-sm font-medium mb-2">
Instagram Handle <span className="text-foreground/50">(optional)</span> Instagram Handle <span className="text-foreground/50">(optional)</span>
</label> </label>
<input <Input
type="text"
id="instagram"
value={instagram} value={instagram}
onChange={(e) => setInstagram(e.target.value)} onChange={setInstagram}
type="text"
placeholder="@yourhandle" placeholder="@yourhandle"
className="w-full px-4 py-2 rounded-lg border border-accent/30 bg-background text-foreground placeholder-foreground/50 focus:outline-none focus:border-primary-cta focus:ring-1 focus:ring-primary-cta"
/> />
</div> </div>
@@ -340,13 +350,11 @@ function WaitlistFormSection({ onSubmit, formStatus }: { onSubmit: (data: Waitli
<label htmlFor="tiktok" className="block text-sm font-medium mb-2"> <label htmlFor="tiktok" className="block text-sm font-medium mb-2">
TikTok Handle <span className="text-foreground/50">(optional)</span> TikTok Handle <span className="text-foreground/50">(optional)</span>
</label> </label>
<input <Input
type="text"
id="tiktok"
value={tiktok} value={tiktok}
onChange={(e) => setTiktok(e.target.value)} onChange={setTiktok}
type="text"
placeholder="@yourhandle" placeholder="@yourhandle"
className="w-full px-4 py-2 rounded-lg border border-accent/30 bg-background text-foreground placeholder-foreground/50 focus:outline-none focus:border-primary-cta focus:ring-1 focus:ring-primary-cta"
/> />
</div> </div>