Skip to content

Commit fe86112

Browse files
committed
Merge branch 'main' into fix/activities
2 parents 786ef4f + 996a0f5 commit fe86112

File tree

3 files changed

+546
-1
lines changed

3 files changed

+546
-1
lines changed

src/app/page.tsx

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import { Card, CardContent } from "@/src/components/ui/card"
66
import { TrendingUp, Users, Shield, Zap } from "lucide-react"
77
import { FeaturedArticle } from "@/src/components/news/featured-article"
88
import { newsArticles, getAllCategories } from "@/src/lib/news-data"
9+
import { Hero } from "@/src/components/hero"
910

1011

1112
export default function HomePage() {
@@ -19,11 +20,20 @@ export default function HomePage() {
1920

2021
<main className="pb-6">
2122

23+
{/* Featured Article Section
2224
<div className="px-4 pt-6 pb-8">
2325
<div className="max-w-6xl mx-auto">
2426
{featuredArticle && <FeaturedArticle article={featuredArticle} />}
2527
</div>
26-
</div>
28+
</div>*/}
29+
30+
31+
{/* New Hero Section */}
32+
<div className="px-4 pt-6">
33+
<div className="mx-auto max-w-6xl">
34+
<Hero />
35+
</div>
36+
</div>
2737

2838

2939

src/components/hero.tsx

Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
"use client"
2+
3+
import Link from "next/link"
4+
import { Button } from "@/src/components/ui/button"
5+
import { Badge } from "@/src/components/ui/badge"
6+
import { ArrowRight, Paintbrush, Music, Rocket, Briefcase } from 'lucide-react'
7+
import { KineticBackground } from "@/src/components/kinetic-background"
8+
import { cn } from "@/lib/utils"
9+
10+
export function Hero() {
11+
return (
12+
<section
13+
aria-label="IP tokenization hero"
14+
className={cn(
15+
"relative mx-auto max-w-6xl overflow-hidden",
16+
"rounded-3xl border border-border/50 bg-background/60 backdrop-blur-xl shadow-2xl"
17+
)}
18+
style={{ minHeight: "420px" }}
19+
>
20+
{/* Vivid kinetic animated background */}
21+
<KineticBackground density={20} speed={0.8} hue={265} glow={40} alpha={0.7} />
22+
23+
{/* Accent glows */}
24+
<div className="pointer-events-none absolute -top-24 -left-16 h-64 w-64 rounded-full bg-fuchsia-500/20 blur-3xl" />
25+
<div className="pointer-events-none absolute -bottom-24 -right-16 h-64 w-64 rounded-full bg-violet-500/20 blur-3xl" />
26+
27+
{/* Content */}
28+
<div className="relative px-5 py-10 sm:px-8 sm:py-14 md:px-12 md:py-16">
29+
{/* Kicker */}
30+
<div className="mb-4">
31+
<Badge variant="secondary" className="bg-background/70 border border-border/60 backdrop-blur">
32+
Gasless mints • Own your IP
33+
</Badge>
34+
</div>
35+
36+
{/* Headline */}
37+
<h1
38+
className={cn(
39+
"text-balance text-3xl font-extrabold leading-tight tracking-tight",
40+
"sm:text-5xl md:text-6xl"
41+
)}
42+
>
43+
<span className="animated-text-gradient">
44+
More value to your content
45+
</span>
46+
<br />
47+
<span className="opacity-90">fast, free, onchain</span>
48+
</h1>
49+
50+
{/* Subheadline (tight and punchy) */}
51+
<p className="mt-3 max-w-xl text-pretty text-sm text-muted-foreground sm:text-base">
52+
Protect your creative work into verifiable, programmable assets
53+
</p>
54+
55+
{/* CTAs */}
56+
<div className="mt-6 flex flex-col items-start gap-3 sm:flex-row sm:items-center">
57+
<Button
58+
asChild
59+
size="lg"
60+
className={cn(
61+
"px-5",
62+
"transition-transform duration-200 hover:scale-[1.02]",
63+
"shadow-sm"
64+
)}
65+
>
66+
<Link href="/create" aria-label="Start tokenizing for free">
67+
Start
68+
<ArrowRight className="ml-2 h-4 w-4" />
69+
</Link>
70+
</Button>
71+
72+
{/* Secondary button for sign up
73+
<Button
74+
asChild
75+
size="lg"
76+
variant="outline"
77+
className="px-5 border-border/70 bg-background/70 backdrop-blur"
78+
>
79+
<Link href="/create" aria-label="Sign up to tokenize your content">
80+
Sign up
81+
</Link>
82+
</Button>*/}
83+
</div>
84+
85+
{/* Audience chips with motion
86+
<div className="mt-6 grid w-full grid-cols-2 gap-2 sm:max-w-lg sm:grid-cols-4">
87+
<AudienceChip icon={<Paintbrush className="h-3.5 w-3.5" />} label="Creators" delay={0} />
88+
<AudienceChip icon={<Music className="h-3.5 w-3.5" />} label="Artists" delay={100} />
89+
<AudienceChip icon={<Rocket className="h-3.5 w-3.5" />} label="Startups" delay={200} />
90+
<AudienceChip icon={<Briefcase className="h-3.5 w-3.5" />} label="Business" delay={300} />
91+
</div>*/}
92+
93+
{/* Helper styles */}
94+
<style jsx>{`
95+
/* Animated gradient text */
96+
.animated-text-gradient {
97+
background: linear-gradient(90deg, #8b5cf6, #ec4899, #22d3ee, #8b5cf6);
98+
background-size: 300% 300%;
99+
-webkit-background-clip: text;
100+
background-clip: text;
101+
color: transparent;
102+
animation: gradientShift 8s ease-in-out infinite;
103+
}
104+
@keyframes gradientShift {
105+
0% { background-position: 0% 50%; }
106+
50% { background-position: 100% 50%; }
107+
100% { background-position: 0% 50%; }
108+
}
109+
/* Chip entrance */
110+
.chip-enter {
111+
transform: translateY(8px);
112+
opacity: 0;
113+
animation: chipUp 600ms cubic-bezier(0.2, 0.8, 0.2, 1) forwards;
114+
}
115+
@keyframes chipUp {
116+
to { transform: translateY(0px); opacity: 1; }
117+
}
118+
`}</style>
119+
</div>
120+
</section>
121+
)
122+
}
123+
124+
function AudienceChip({
125+
icon,
126+
label,
127+
delay = 0,
128+
}: {
129+
icon: React.ReactNode
130+
label: string
131+
delay?: number
132+
}) {
133+
return (
134+
<div
135+
className="chip-enter flex items-center gap-2 rounded-full border border-border/60 bg-background/60 px-3 py-2 text-xs shadow-sm backdrop-blur"
136+
style={{ animationDelay: `${delay}ms` }}
137+
>
138+
<span className="text-primary">{icon}</span>
139+
<span className="font-medium">{label}</span>
140+
</div>
141+
)
142+
}

0 commit comments

Comments
 (0)