From 274342aab6b797aebfee14647327cbc0eea9010f Mon Sep 17 00:00:00 2001 From: yoge Date: Wed, 25 Mar 2026 13:18:40 +0800 Subject: [PATCH] feat: add Home page with Hero, Features, HowItWorks, Pricing, Contact sections Co-Authored-By: Claude Opus 4.6 --- src/components/home/ContactSection.tsx | 98 +++++++++++++++++++ src/components/home/FeaturesSection.tsx | 44 +++++++++ src/components/home/HeroSection.tsx | 71 ++++++++++++++ src/components/home/HowItWorksSection.tsx | 41 ++++++++ src/components/home/PricingSection.tsx | 113 ++++++++++++++++++++++ src/pages/HomePage.tsx | 26 +++++ 6 files changed, 393 insertions(+) create mode 100644 src/components/home/ContactSection.tsx create mode 100644 src/components/home/FeaturesSection.tsx create mode 100644 src/components/home/HeroSection.tsx create mode 100644 src/components/home/HowItWorksSection.tsx create mode 100644 src/components/home/PricingSection.tsx create mode 100644 src/pages/HomePage.tsx diff --git a/src/components/home/ContactSection.tsx b/src/components/home/ContactSection.tsx new file mode 100644 index 0000000..720b533 --- /dev/null +++ b/src/components/home/ContactSection.tsx @@ -0,0 +1,98 @@ +import { useState } from 'react'; +import { Mail, Users, Send } from 'lucide-react'; +import { useLanguage } from '../../contexts/LanguageContext'; + +export default function ContactSection() { + const { t } = useLanguage(); + const c = t.marketing.contact; + const [status, setStatus] = useState<'idle' | 'sending' | 'sent'>('idle'); + + const handleSubmit = (e: React.FormEvent) => { + e.preventDefault(); + setStatus('sending'); + // Simulate send — replace with actual API call later + setTimeout(() => { + setStatus('sent'); + setTimeout(() => setStatus('idle'), 3000); + (e.target as HTMLFormElement).reset(); + }, 1000); + }; + + return ( +
+
+
+

{c.title}

+

{c.subtitle}

+
+ +
+ {/* Contact info */} +
+
+
+ +
+
+
{t.common.email}
+ + yogecoder@gmail.com + +
+
+ +
+
+ +
+
+
{c.qqGroup}
+ 1018282100 +
+
+
+ + {/* Contact form */} +
+
+ + +
+
+ + +
+
+ +