banatie-service/apps/landing/src/app/homepage/_components/ShapeTheFutureSection.tsx

92 lines
3.3 KiB
TypeScript

'use client';
import { MessageCircle, Vote, Users } from 'lucide-react';
const ZIGZAG_POINTS = [
40, 0, 20, 10, 30, 50, 20, 15, 0, 20, 25, 50, 10, 20, 0, 15, 10, 25, 20, 50, 0, 20, 40, 20, 25,
10, 0, 15, 0, 20, 0, 40, 10, 0,
];
function generateZigzagClipPath(yValues: number[]): string {
const lastIndex = yValues.length - 1;
const getX = (i: number) => `${(i / lastIndex) * 100}%`;
const topEdge = yValues.map((y, i) => `${getX(i)} ${y}px`).join(', ');
const bottomEdge = [...yValues]
.map((y, i) => [getX(i), y] as const)
.reverse()
.map(([x, y]) => `${x} calc(100% - 50px + ${y}px)`)
.join(', ');
return `polygon(${topEdge}, ${bottomEdge})`;
}
export const styles = `
.shape-future {
clip-path: ${generateZigzagClipPath(ZIGZAG_POINTS)};
}
.metal-texture {
position: relative;
overflow: hidden;
}
.metal-texture::before {
content: '';
position: absolute;
inset: 0;
background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 300 300' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.8' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)'/%3E%3C/svg%3E");
opacity: 0.5;
mix-blend-mode: multiply;
pointer-events: none;
z-index: 10;
}
.shape-future-title {
font-family: 'Caveat', cursive;
}
`;
const features = [
{ icon: MessageCircle, text: 'Direct feedback channel' },
{ icon: Vote, text: 'Feature voting' },
{ icon: Users, text: 'Early adopter community' },
];
export function ShapeTheFutureSection() {
return (
<div className="relative my-[60px]">
<section className="shape-future metal-texture bg-[#2a2a2a] relative z-[2]">
<section className="shape-future bg-black absolute w-full h-[500px] top-[-446px] left-[2px] opacity-30 z-[2] " />
<div className="absolute h-[200px] w-full blur-sm">
<section className="shape-future bg-black absolute w-full h-[500px] top-[-430px] left-[2px] opacity-30 z-[2] " />
</div>
<div className="absolute h-[200px] bottom-[-50px] w-full blur-sm">
<section className="shape-future bg-black absolute w-full h-[500px] bottom-[-388px] left-[2px] opacity-20 z-[2] " />
</div>
<section className="shape-future bg-white absolute w-full h-[500px] bottom-[-449px] left-[1px] opacity-30 z-[2] " />
<div className="relative z-[6] pt-[100px] pb-[60px] px-10 text-center max-w-[700px] mx-auto">
<h2 className="shape-future-title text-5xl font-semibold text-[#f5f5f5] mb-4 leading-tight">
Shape the future of Banatie
</h2>
<p className="text-[1.05rem] text-[#a0a0a0] mb-6 leading-relaxed">
We&apos;re building this for developers like you. Early adopters get direct influence on
our roadmap suggest features, vote on priorities, and help us build exactly what you
need.
</p>
<div className="flex flex-wrap gap-6 justify-center text-[0.95rem] text-[#888] mb-20">
{features.map((feature, i) => (
<span key={i} className="flex items-center gap-2">
<feature.icon className="w-4 h-4" />
{feature.text}
</span>
))}
</div>
</div>
</section>
</div>
);
}