7 Commits

Author SHA1 Message Date
a830549069 Update src/app/page.tsx 2026-05-23 02:44:33 +00:00
13bea032e7 Merge version_3 into main
Merge version_3 into main
2026-05-23 02:42:13 +00:00
e9ae2d83ff Update src/app/page.tsx 2026-05-23 02:42:10 +00:00
4e66f324df Merge version_2 into main
Merge version_2 into main
2026-05-23 02:39:23 +00:00
ed497f179e Update src/app/page.tsx 2026-05-23 02:39:20 +00:00
073d424b0f Merge version_1 into main
Merge version_1 into main
2026-05-23 02:35:33 +00:00
ab65a13d37 Merge version_1 into main
Merge version_1 into main
2026-05-23 02:35:05 +00:00

View File

@@ -2,19 +2,43 @@
import { ThemeProvider } from "@/providers/themeProvider/ThemeProvider";
import ReactLenis from "lenis/react";
import ContactCTA from '@/components/sections/contact/ContactCTA';
import FaqDouble from '@/components/sections/faq/FaqDouble';
import FeatureBento from '@/components/sections/feature/FeatureBento';
import FooterMedia from '@/components/sections/footer/FooterMedia';
import HeroSplitKpi from '@/components/sections/hero/HeroSplitKpi';
import NavbarLayoutFloatingInline from '@/components/navbar/NavbarLayoutFloatingInline';
import PricingCardTwo from '@/components/sections/pricing/PricingCardTwo';
import SocialProofOne from '@/components/sections/socialProof/SocialProofOne';
import SplitAbout from '@/components/sections/about/SplitAbout';
import TestimonialCardTwo from '@/components/sections/testimonial/TestimonialCardTwo';
import { MessageSquare, Smartphone, Sparkles } from "lucide-react";
import NavbarLayoutFloatingOverlay from '@/components/navbar/NavbarLayoutFloatingOverlay/NavbarLayoutFloatingOverlay';
import Input from '@/components/form/Input';
import ButtonElasticEffect from '@/components/button/ButtonElasticEffect/ButtonElasticEffect';
import { useState } from "react";
export default function ClipToolPage() {
const [videoUrl, setVideoUrl] = useState("");
const [captions, setCaptions] = useState(true);
const [layout, setLayout] = useState("vertical");
const [timeframe, setTimeframe] = useState("30s");
const [loading, setLoading] = useState(false);
const [error, setError] = useState("");
const [clips, setClips] = useState<string[]>([]);
const handleGenerate = async () => {
if (!videoUrl) {
setError("Please enter a valid YouTube URL.");
return;
}
setLoading(true);
setError("");
try {
const response = await fetch('/api/generate-clips', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ videoUrl, captions, layout, timeframe })
});
const data = await response.json();
if (data.error) throw new Error(data.error);
setClips(data.clips || []);
} catch (err: any) {
setError(err.message || "Something went wrong. Please try again.");
} finally {
setLoading(false);
}
};
export default function LandingPage() {
return (
<ThemeProvider
defaultButtonVariant="hover-bubble"
@@ -29,238 +53,83 @@ export default function LandingPage() {
headingFontWeight="normal"
>
<ReactLenis root>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingInline
navItems={[
{
name: "Features", id: "#features"},
{
name: "Pricing", id: "#pricing"},
{
name: "FAQ", id: "#faq"},
]}
brandName="ClipGen AI"
button={{
text: "Get Started", href: "#contact"}}
/>
</div>
<div id="nav" data-section="nav">
<NavbarLayoutFloatingOverlay
brandName="ClipGen AI"
navItems={[]}
/>
</div>
<div id="hero" data-section="hero">
<HeroSplitKpi
background={{
variant: "gradient-bars"}}
title="Turn Long Videos into Viral Clips in Seconds"
description="Stop wasting hours cutting videos. Upload your long-form content, and our AI instantly extracts the most engaging moments for TikTok, Reels, and Shorts."
kpis={[
{
value: "90%", label: "Time Saved"},
{
value: "100+", label: "Clips Generated"},
{
value: "24/7", label: "Automated AI"},
]}
enableKpiAnimation={true}
buttons={[
{
text: "Start Generating", href: "#contact"},
]}
imageSrc="http://img.b2bpic.net/free-photo/close-up-accounting-sales-statistics-computer-display_482257-122982.jpg"
mediaAnimation="slide-up"
avatars={[
{
src: "http://img.b2bpic.net/free-photo/portrait-young-business-woman-standing-outside-office-buildings-business-success-concept_58466-11854.jpg", alt: "Portrait of young business woman standing outside office buildings"},
{
src: "http://img.b2bpic.net/free-photo/portrait-young-confident-woman-startup-manager-office-posing-with-confidence-looking_1258-195341.jpg", alt: "Portrait of young confident woman startup manager"},
{
src: "http://img.b2bpic.net/free-photo/good-looking-business-woman-with-arms-crossed_23-2147626300.jpg", alt: "Good looking business woman with arms crossed"},
{
src: "http://img.b2bpic.net/free-photo/young-attractive-emotional-girl-business-style-clothes_78826-2303.jpg", alt: "Young attractive emotional girl in business style clothes"},
{
src: "http://img.b2bpic.net/free-photo/man-portrait-posing-loft-modern-space_158595-5366.jpg", alt: "Man portrait posing in a loft modern space"},
]}
avatarText="Trusted by 5,000+ creators"
marqueeItems={[
{
type: "text", text: "AI-Powered"},
{
type: "text", text: "Lightning Fast"},
{
type: "text", text: "Multi-Platform"},
{
type: "text", text: "High Engagement"},
{
type: "text", text: "Creator Approved"},
]}
/>
</div>
<div id="tool-interface" data-section="tool-interface" className="py-20 flex flex-col items-center justify-center min-h-[80vh] px-4 text-center">
<h1 className="text-4xl md:text-5xl font-bold mb-6">ClipGen AI Tool</h1>
<p className="max-w-xl mb-10 opacity-80">Input your YouTube URL and configure your clipping settings below.</p>
<div className="w-full max-w-lg space-y-6">
<Input
value={videoUrl}
onChange={setVideoUrl}
placeholder="Paste YouTube URL here..."
ariaLabel="YouTube Video URL"
/>
<div className="grid grid-cols-1 md:grid-cols-3 gap-4 text-left">
<div className="p-4 rounded-xl border">
<h3 className="font-semibold mb-2">Captions</h3>
<select
value={captions ? "on" : "off"}
onChange={(e) => setCaptions(e.target.value === "on")}
className="w-full bg-transparent border-none focus:ring-0"
>
<option value="on">Enabled</option>
<option value="off">Disabled</option>
</select>
</div>
<div className="p-4 rounded-xl border">
<h3 className="font-semibold mb-2">Layout</h3>
<select
value={layout}
onChange={(e) => setLayout(e.target.value)}
className="w-full bg-transparent border-none focus:ring-0"
>
<option value="vertical">Vertical (9:16)</option>
<option value="square">Square (1:1)</option>
<option value="horizontal">Horizontal (16:9)</option>
</select>
</div>
<div className="p-4 rounded-xl border">
<h3 className="font-semibold mb-2">Time</h3>
<select
value={timeframe}
onChange={(e) => setTimeframe(e.target.value)}
className="w-full bg-transparent border-none focus:ring-0"
>
<option value="30s">30 Seconds</option>
<option value="60s">60 Seconds</option>
<option value="90s">90 Seconds</option>
</select>
</div>
</div>
<div id="about" data-section="about">
<SplitAbout
textboxLayout="split"
useInvertedBackground={true}
title="The AI Tool Content Creators Trust"
description="We believe creators should spend their time creating, not editing. Our platform automates the tedious parts of content distribution so you can focus on your story."
bulletPoints={[
{
title: "Auto Clip Detection", description: "AI finds the funniest, loudest, and most engaging moments automatically."},
{
title: "Auto Captions", description: "Engage your viewers with perfectly synced subtitles for every clip."},
{
title: "Multi-Platform Export", description: "Automatically resize for TikTok, Reels, and Shorts in one click."},
]}
imageSrc="http://img.b2bpic.net/free-photo/post-production-specialist-using-headphones-test-improve-audio-quality_482257-121838.jpg"
mediaAnimation="blur-reveal"
/>
</div>
<ButtonElasticEffect
text={loading ? "Processing..." : "Generate Clips Now"}
onClick={handleGenerate}
disabled={loading}
className="w-full"
/>
<div id="features" data-section="features">
<FeatureBento
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={false}
features={[
{
title: "Auto Highlights", description: "AI analyzes audio and video to find the best moments.", bentoComponent: "reveal-icon", icon: Sparkles,
},
{
title: "Smart Captions", description: "Generated captions that actually stay on beat.", bentoComponent: "reveal-icon", icon: MessageSquare,
},
{
title: "Vertical Resizing", description: "Turn landscape into portrait perfectly every time.", bentoComponent: "reveal-icon", icon: Smartphone,
},
]}
title="Built for Creators Who Need More Reach"
description="Powerful AI tools that integrate seamlessly into your workflow."
/>
</div>
{error && <p className="text-red-500 mt-4">{error}</p>}
<div id="testimonials" data-section="testimonials">
<TestimonialCardTwo
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={true}
testimonials={[
{
id: "1", name: "Sarah Johnson", role: "Podcaster", testimonial: "I used to spend 5 hours editing. Now I do it in 5 minutes.", imageSrc: "http://img.b2bpic.net/free-photo/portrait-young-woman-digital-nomad-standing-office-with-laptop-smiling-working-her_1258-195345.jpg"},
{
id: "2", name: "Michael Chen", role: "YouTuber", testimonial: "The AI detection is surprisingly smart at finding funny bits.", imageSrc: "http://img.b2bpic.net/free-photo/man-portrait-posing-loft-modern-space_158595-5365.jpg"},
{
id: "3", name: "Emily Rodriguez", role: "Streamer", testimonial: "Finally, an AI tool that actually gets the vertical framing right.", imageSrc: "http://img.b2bpic.net/free-photo/male-office-worker-sitting-desk_1098-21342.jpg"},
{
id: "4", name: "David Kim", role: "Marketer", testimonial: "My TikTok traffic has doubled since using these clips.", imageSrc: "http://img.b2bpic.net/free-photo/working-man_1098-18366.jpg"},
{
id: "5", name: "Anna Lee", role: "Small Business Owner", testimonial: "Best investment for my social media marketing strategy.", imageSrc: "http://img.b2bpic.net/free-photo/african-man-glasses-posing-city-with-gently-smile-gorgeous-brunette-black-guy-chilling-outdoor-big-headphones_197531-21898.jpg"},
]}
title="Creators Who Save Hours Weekly"
description="Join thousands of creators who have scaled their content output with our platform."
/>
</div>
<div id="social-proof" data-section="social-proof">
<SocialProofOne
textboxLayout="default"
useInvertedBackground={false}
names={[
"StreamLabs", "PodCastify", "CreatorSpace", "GrowthTube", "ClipMedia", "VideoLaunch", "ViralPath"]}
title="Used by Leading Creators"
description="Trusted by thousands of professionals in the creator economy."
/>
</div>
<div id="pricing" data-section="pricing">
<PricingCardTwo
animationType="slide-up"
textboxLayout="default"
useInvertedBackground={true}
plans={[
{
id: "basic", badge: "Free", price: "$0", subtitle: "For getting started", features: [
"5 clips per month", "Watermark on exports", "Standard support"],
buttons: [
{
text: "Get Started", href: "#"},
],
},
{
id: "pro", badge: "Premium", price: "$29/mo", subtitle: "For pro creators", features: [
"Unlimited clips", "HD Exports", "Faster processing", "Custom captions"],
buttons: [
{
text: "Upgrade Now", href: "#"},
],
},
]}
title="Simple, Transparent Pricing"
description="Start with our free plan or upgrade for unlimited clip generation."
/>
</div>
<div id="faq" data-section="faq">
<FaqDouble
textboxLayout="default"
useInvertedBackground={false}
faqs={[
{
id: "1", title: "Is my video data private?", content: "Yes, we prioritize your privacy and data security."},
{
id: "2", title: "Can I use this for Reels?", content: "Absolutely, it's perfect for Reels, TikTok, and YouTube Shorts."},
{
id: "3", title: "How fast is processing?", content: "Most clips are processed in under 60 seconds."},
]}
title="Frequently Asked Questions"
description="Have more questions? Check out our help docs."
faqsAnimation="blur-reveal"
/>
</div>
<div id="contact" data-section="contact">
<ContactCTA
useInvertedBackground={true}
background={{
variant: "plain"}}
tag="Get Started Today"
title="Ready to Scale Your Content?"
description="Sign up now and start getting more engagement with AI-powered video clips."
buttons={[
{
text: "Sign Up Free", href: "#"},
]}
/>
</div>
<div id="footer" data-section="footer">
<FooterMedia
imageSrc="http://img.b2bpic.net/free-photo/video-editor-polishing-raw-footage-chroma-key-pc-closeup_482257-122541.jpg"
logoText="ClipGen AI"
columns={[
{
title: "Product", items: [
{
label: "Features", href: "#features"},
{
label: "Pricing", href: "#pricing"},
],
},
{
title: "Support", items: [
{
label: "FAQ", href: "#faq"},
{
label: "Contact", href: "#contact"},
],
},
{
title: "Legal", items: [
{
label: "Privacy", href: "#"},
{
label: "Terms", href: "#"},
],
},
]}
/>
</div>
{clips.length > 0 && (
<div className="mt-10 grid grid-cols-1 gap-6 w-full">
<h2 className="text-2xl font-semibold">Generated Clips</h2>
{clips.map((clip, i) => (
<video key={i} src={clip} controls className="w-full rounded-2xl shadow-lg" />
))}
</div>
)}
</div>
</div>
</ReactLenis>
</ThemeProvider>
);
}
}