This commit is contained in:
Timo Knuth
2025-10-18 17:55:32 +02:00
parent 254e6490b8
commit 91b78cb284
65 changed files with 4481 additions and 1078 deletions

View File

@@ -15,15 +15,12 @@ export const FAQ: React.FC<FAQProps> = ({ t }) => {
'static_vs_dynamic',
'forever',
'file_type',
'password',
'analytics',
'privacy',
'bulk',
];
return (
<section id="faq" className="py-16 bg-gray-50">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
{t.faq.title}
@@ -57,6 +54,12 @@ export const FAQ: React.FC<FAQProps> = ({ t }) => {
</Card>
))}
</div>
<div className="text-center mt-8">
<a href="/faq" className="text-primary-600 hover:text-primary-700 font-medium">
View All Questions
</a>
</div>
</div>
</section>
);

View File

@@ -27,11 +27,20 @@ export const Features: React.FC<FeaturesProps> = ({ t }) => {
),
color: 'text-purple-600 bg-purple-100',
},
{
key: 'unlimited',
icon: (
<svg className="w-6 h-6" fill="none" stroke="currentColor" viewBox="0 0 24 24">
<path strokeLinecap="round" strokeLinejoin="round" strokeWidth={2} d="M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z" />
</svg>
),
color: 'text-green-600 bg-green-100',
},
];
return (
<section className="py-16 bg-gray-50">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
{t.features.title}

View File

@@ -12,15 +12,15 @@ interface HeroProps {
export const Hero: React.FC<HeroProps> = ({ t }) => {
const templateCards = [
{ title: 'Restaurant Menu', color: 'bg-pink-100', icon: '🍽️' },
{ title: 'Business Card', color: 'bg-blue-100', icon: '💼' },
{ title: 'Event Tickets', color: 'bg-green-100', icon: '🎫' },
{ title: 'WiFi Access', color: 'bg-purple-100', icon: '📶' },
{ title: 'URL/Website', color: 'bg-blue-100', icon: '🌐' },
{ title: 'WiFi', color: 'bg-purple-100', icon: '📶' },
{ title: 'Email', color: 'bg-green-100', icon: '📧' },
{ title: 'Phone Number', color: 'bg-pink-100', icon: '📞' },
];
return (
<section className="relative overflow-hidden bg-gradient-to-br from-blue-50 via-white to-purple-50 py-20">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="grid lg:grid-cols-2 gap-12 items-center">
{/* Left Content */}
<div className="space-y-8">
@@ -56,7 +56,7 @@ export const Hero: React.FC<HeroProps> = ({ t }) => {
{t.hero.cta_primary}
</Button>
</Link>
<Link href="/create">
<Link href="/#pricing">
<Button variant="outline" size="lg" className="text-lg px-8 py-4 w-full sm:w-auto">
{t.hero.cta_secondary}
</Button>

View File

@@ -28,22 +28,6 @@ export default function HomePageClient() {
return (
<>
<Hero t={t} />
<StatsStrip t={t} />
{/* Industry Buttons */}
<section className="py-8">
<div className="container mx-auto px-4">
<div className="flex flex-wrap justify-center gap-3">
{industries.map((industry) => (
<Button key={industry} variant="outline" size="sm">
{industry}
</Button>
))}
</div>
</div>
</section>
<TemplateCards t={t} />
<InstantGenerator t={t} />
<StaticVsDynamic t={t} />
<Features t={t} />

View File

@@ -74,7 +74,7 @@ export const InstantGenerator: React.FC<InstantGeneratorProps> = ({ t }) => {
return (
<section className="py-16 bg-gray-50">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
{t.generator.title}
@@ -180,7 +180,7 @@ export const InstantGenerator: React.FC<InstantGeneratorProps> = ({ t }) => {
</Button>
</div>
<Button className="w-full">
<Button className="w-full" onClick={() => window.location.href = '/login'}>
{t.generator.save_track}
</Button>
</Card>

View File

@@ -27,7 +27,7 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
return (
<section id="pricing" className="py-16">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
{t.pricing.title}
@@ -67,7 +67,7 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
<CardContent className="space-y-4">
<ul className="space-y-3">
{t.pricing[plan.key].features.map((feature: string, index: number) => (
{t.pricing[plan.key].features.slice(0, 3).map((feature: string, index: number) => (
<li key={index} className="flex items-start space-x-3">
<svg className="w-5 h-5 text-success-500 flex-shrink-0 mt-0.5" fill="currentColor" viewBox="0 0 20 20">
<path fillRule="evenodd" d="M16.707 5.293a1 1 0 010 1.414l-8 8a1 1 0 01-1.414 0l-4-4a1 1 0 011.414-1.414L8 12.586l7.293-7.293a1 1 0 011.414 0z" clipRule="evenodd" />
@@ -88,6 +88,12 @@ export const Pricing: React.FC<PricingProps> = ({ t }) => {
</Card>
))}
</div>
<div className="text-center mt-8">
<a href="/#pricing" className="text-primary-600 hover:text-primary-700 font-medium">
View Full Pricing Details
</a>
</div>
</div>
</section>
);

View File

@@ -11,7 +11,7 @@ interface StaticVsDynamicProps {
export const StaticVsDynamic: React.FC<StaticVsDynamicProps> = ({ t }) => {
return (
<section className="py-16">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="grid lg:grid-cols-2 gap-8 max-w-6xl mx-auto">
{/* Static QR Codes */}
<Card className="relative">

View File

@@ -16,7 +16,7 @@ export const StatsStrip: React.FC<StatsStripProps> = ({ t }) => {
return (
<section className="py-16 bg-gray-50">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="grid grid-cols-2 lg:grid-cols-4 gap-8">
{stats.map((stat, index) => (
<div key={stat.key} className="text-center">

View File

@@ -42,7 +42,7 @@ export const TemplateCards: React.FC<TemplateCardsProps> = ({ t }) => {
return (
<section className="py-16">
<div className="container mx-auto px-4">
<div className="container mx-auto px-4 sm:px-6 lg:px-8 max-w-7xl">
<div className="text-center mb-12">
<h2 className="text-3xl lg:text-4xl font-bold text-gray-900 mb-4">
{t.templates.title}