Introduces a Christmas-themed UI to the homepage during December, including festive colors and a holiday footer message. Adds a collection of Christmas quotes and updates quote selection logic to use them in December, with new utility functions for date checks and quote retrieval.
170 lines
7.2 KiB
TypeScript
170 lines
7.2 KiB
TypeScript
import { getPlatformStatsServer } from "@/lib/server-api";
|
|
import { HomeNavbar } from "@/components/home-navbar";
|
|
import { Suspense } from "react";
|
|
import { Shield, LineChart, Zap, ArrowRight, CheckCircle2, Sparkles } from "lucide-react";
|
|
import { Button } from "@/components/ui/button";
|
|
import Link from "next/link";
|
|
import { AnimatedStatsSection } from "@/components/animated-stats-section";
|
|
import { isDecember } from "@/lib/utils/christmas";
|
|
|
|
export const dynamic = 'force-dynamic';
|
|
|
|
const PY_20 = 20;
|
|
const PY_32 = 32;
|
|
const PX_6 = 6;
|
|
const PX_10 = 10;
|
|
|
|
function formatNumberValue(num: number): string {
|
|
return new Intl.NumberFormat().format(Math.round(num));
|
|
}
|
|
|
|
// Format currency
|
|
function formatCurrencyValue(amount: number): string {
|
|
return new Intl.NumberFormat('en-GB', {
|
|
style: 'currency',
|
|
currency: 'GBP',
|
|
maximumFractionDigits: 0
|
|
}).format(amount);
|
|
}
|
|
|
|
// This is a server component
|
|
export default async function Home() {
|
|
try {
|
|
const stats = await getPlatformStatsServer();
|
|
const isDec = isDecember();
|
|
|
|
return (
|
|
<div className={`flex flex-col min-h-screen bg-black text-white ${isDec ? 'christmas-theme' : ''}`}>
|
|
<div className={`absolute inset-0 bg-gradient-to-br pointer-events-none scale-100 ${
|
|
isDec
|
|
? 'from-red-500/10 via-green-500/5 to-transparent'
|
|
: 'from-[#D53F8C]/10 via-[#D53F8C]/3 to-transparent'
|
|
}`} />
|
|
<HomeNavbar />
|
|
|
|
{/* Hero Section */}
|
|
<section className="relative overflow-hidden">
|
|
<div className="relative flex flex-col items-center px-4 py-20 md:py-32 mx-auto max-w-7xl">
|
|
<div className="flex flex-col items-center text-center space-y-6 max-w-3xl">
|
|
<div className={`inline-flex items-center px-4 py-2 rounded-full border mb-4 ${
|
|
isDec
|
|
? 'bg-red-500/10 border-red-500/20'
|
|
: 'bg-[#D53F8C]/10 border-[#D53F8C]/20'
|
|
}`}>
|
|
<Sparkles className={`h-4 w-4 mr-2 ${isDec ? 'text-red-400' : 'text-[#D53F8C]'}`} />
|
|
<span className={`text-sm font-medium ${isDec ? 'text-red-400' : 'text-[#D53F8C]'}`}>
|
|
Secure Crypto Payments
|
|
</span>
|
|
</div>
|
|
<h1 className="text-4xl md:text-6xl font-bold tracking-tight">
|
|
The Future of <span className={isDec ? 'text-red-400' : 'text-[#D53F8C]'}>E-commerce</span> Management
|
|
</h1>
|
|
<p className="text-lg md:text-xl text-zinc-400 max-w-2xl">
|
|
{isDec
|
|
? 'Spread joy this holiday season with our all-in-one platform. Secure payments, order tracking, and analytics wrapped up in one beautiful package. 🎄'
|
|
: 'Streamline your online business with our all-in-one platform. Secure payments, order tracking, and analytics in one place.'
|
|
}
|
|
</p>
|
|
<div className="flex flex-col sm:flex-row gap-4 mt-4">
|
|
<Link href="/dashboard">
|
|
<Button
|
|
size="lg"
|
|
className={`gap-2 text-white border-0 h-12 px-8 ${
|
|
isDec
|
|
? 'bg-gradient-to-r from-red-500 to-green-500 hover:from-red-600 hover:to-green-600'
|
|
: 'bg-[#D53F8C] hover:bg-[#B83280]'
|
|
}`}
|
|
>
|
|
Get Started
|
|
<ArrowRight className="h-4 w-4" />
|
|
</Button>
|
|
</Link>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Features Grid */}
|
|
<section className="relative py-20 px-4">
|
|
<div className="max-w-7xl mx-auto space-y-20">
|
|
<div className="grid md:grid-cols-3 gap-6">
|
|
{[
|
|
{
|
|
icon: Shield,
|
|
title: "Secure Payments",
|
|
description: "Built-in cryptocurrency support with maximum privacy and security for your transactions."
|
|
},
|
|
{
|
|
icon: LineChart,
|
|
title: "Real-time Analytics",
|
|
description: "Track your business performance with detailed insights and reporting tools."
|
|
},
|
|
{
|
|
icon: Zap,
|
|
title: "Lightning Fast",
|
|
description: "Optimized for speed with real-time updates and instant notifications."
|
|
}
|
|
].map((feature, i) => {
|
|
const christmasColors = ['from-red-500/5', 'from-green-500/5', 'from-yellow-500/5'];
|
|
const christmasBorders = ['border-red-500/30', 'border-green-500/30', 'border-yellow-500/30'];
|
|
const christmasIcons = ['text-red-400', 'text-green-400', 'text-yellow-400'];
|
|
const christmasBgs = ['bg-red-500/10', 'bg-green-500/10', 'bg-yellow-500/10'];
|
|
|
|
return (
|
|
<div
|
|
key={i}
|
|
className={`group relative overflow-hidden rounded-xl bg-gradient-to-b p-6 border ${
|
|
isDec
|
|
? `from-zinc-800/30 to-transparent ${christmasBorders[i % 3]}`
|
|
: 'from-zinc-800/30 to-transparent border-zinc-800'
|
|
}`}
|
|
>
|
|
<div
|
|
className={`absolute inset-0 bg-gradient-to-b to-transparent opacity-0 group-hover:opacity-100 transition-opacity ${
|
|
isDec ? christmasColors[i % 3] : 'from-[#D53F8C]/5'
|
|
}`}
|
|
/>
|
|
<div className="relative">
|
|
<div className={`h-12 w-12 flex items-center justify-center rounded-lg mb-4 ${
|
|
isDec ? christmasBgs[i % 3] : 'bg-[#D53F8C]/10'
|
|
}`}>
|
|
<feature.icon className={`h-6 w-6 ${isDec ? christmasIcons[i % 3] : 'text-[#D53F8C]'}`} />
|
|
</div>
|
|
<h3 className="text-lg font-semibold text-white mb-2">{feature.title}</h3>
|
|
<p className="text-sm text-zinc-400">{feature.description}</p>
|
|
</div>
|
|
</div>
|
|
);
|
|
})}
|
|
</div>
|
|
|
|
{/* Stats Section */}
|
|
<div className="relative">
|
|
<AnimatedStatsSection stats={stats as any} />
|
|
</div>
|
|
</div>
|
|
</section>
|
|
|
|
{/* Footer */}
|
|
<footer className="relative py-12 px-4 mt-auto">
|
|
<div className="max-w-7xl mx-auto flex flex-col items-center">
|
|
{isDec && (
|
|
<div className="flex items-center gap-2 mb-4 text-red-400 animate-twinkle">
|
|
<span className="text-xl">🎄</span>
|
|
<span className="text-sm font-medium">Happy Holidays from da ember team!</span>
|
|
<span className="text-xl">🎄</span>
|
|
</div>
|
|
)}
|
|
<div className="text-sm text-zinc-500">
|
|
© {new Date().getFullYear()} Ember. All rights reserved.
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
</div>
|
|
);
|
|
} catch (error) {
|
|
console.error(error);
|
|
return <div>Error loading page</div>;
|
|
}
|
|
}
|