107 lines
4.7 KiB
TypeScript
107 lines
4.7 KiB
TypeScript
'use client';
|
|
|
|
import { useRef, useState, useEffect } from 'react';
|
|
import Section from '@/components/ui/Section';
|
|
import Container from '@/components/ui/Container';
|
|
import Heading from '@/components/ui/Heading';
|
|
import MockupStack from '@/components/ui/MockupStack';
|
|
import LeagueHomeMockup from '@/components/mockups/LeagueHomeMockup';
|
|
import StandingsTableMockup from '@/components/mockups/StandingsTableMockup';
|
|
import TeamCompetitionMockup from '@/components/mockups/TeamCompetitionMockup';
|
|
import ProtestWorkflowMockup from '@/components/mockups/ProtestWorkflowMockup';
|
|
import LeagueDiscoveryMockup from '@/components/mockups/LeagueDiscoveryMockup';
|
|
import DriverProfileMockup from '@/components/mockups/DriverProfileMockup';
|
|
import { useScrollProgress } from '@/hooks/useScrollProgress';
|
|
|
|
const features = [
|
|
{
|
|
title: "A Real Home for Your League",
|
|
description: "Stop juggling Discord, spreadsheets, and iRacing admin panels. GridPilot brings everything into one dedicated platform built specifically for league racing.",
|
|
MockupComponent: LeagueHomeMockup
|
|
},
|
|
{
|
|
title: "Automatic Results & Standings",
|
|
description: "Race happens. Results appear. Standings update. No manual data entry, no spreadsheet formulas, no waiting for someone to publish.",
|
|
MockupComponent: StandingsTableMockup
|
|
},
|
|
{
|
|
title: "Real Team Racing",
|
|
description: "Constructors' championships that actually matter. Driver lineups. Team strategies. Multi-class racing done right.",
|
|
MockupComponent: TeamCompetitionMockup
|
|
},
|
|
{
|
|
title: "Clean Protests & Penalties",
|
|
description: "Structured incident reporting with video clip references. Steward review workflows. Transparent penalty application. Professional race control.",
|
|
MockupComponent: ProtestWorkflowMockup
|
|
},
|
|
{
|
|
title: "Find Your Perfect League",
|
|
description: "Search and discover leagues by game, region, and skill level. Browse featured competitions, check driver counts, and join communities that match your racing style.",
|
|
MockupComponent: LeagueDiscoveryMockup
|
|
},
|
|
{
|
|
title: "Your Racing Identity",
|
|
description: "Cross-league driver profiles with career stats, achievements, and racing history. Build your reputation across multiple championships and showcase your progression.",
|
|
MockupComponent: DriverProfileMockup
|
|
}
|
|
];
|
|
|
|
function FeatureCard({ feature, index }: { feature: typeof features[0], index: number }) {
|
|
return (
|
|
<div
|
|
className="flex flex-col gap-6 sm:gap-6 group"
|
|
style={{
|
|
opacity: 1,
|
|
transform: 'translateY(0) scale(1)'
|
|
}}
|
|
>
|
|
<div className="aspect-video w-full relative">
|
|
<div className="absolute -inset-0.5 bg-gradient-to-r from-racing-red/20 via-primary-blue/20 to-racing-red/20 rounded-lg opacity-0 group-hover:opacity-100 transition-opacity duration-500 blur-sm" />
|
|
<div className="relative">
|
|
<MockupStack index={index}>
|
|
<feature.MockupComponent />
|
|
</MockupStack>
|
|
</div>
|
|
</div>
|
|
<div className="space-y-3">
|
|
<div className="flex items-center gap-2">
|
|
<Heading level={3} className="bg-gradient-to-r from-red-600 via-white to-blue-600 bg-clip-text text-transparent font-medium drop-shadow-[0_0_15px_rgba(220,0,0,0.4)] static-racing-gradient" style={{ WebkitTextStroke: '0.5px rgba(220,0,0,0.2)' }}>
|
|
{feature.title}
|
|
</Heading>
|
|
</div>
|
|
<p className="text-sm sm:text-base leading-7 sm:leading-7 text-gray-400 font-light">
|
|
{feature.description}
|
|
</p>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
export default function FeatureGrid() {
|
|
return (
|
|
<Section variant="default">
|
|
<Container className="relative z-10">
|
|
<Container size="sm" center>
|
|
<div
|
|
style={{
|
|
opacity: 1,
|
|
transform: 'translateY(0)'
|
|
}}
|
|
>
|
|
<Heading level={2} className="bg-gradient-to-r from-red-600 via-white to-blue-600 bg-clip-text text-transparent font-semibold drop-shadow-[0_0_20px_rgba(220,0,0,0.5)] static-racing-gradient" style={{ WebkitTextStroke: '1px rgba(220,0,0,0.2)' }}>
|
|
Building for League Racing
|
|
</Heading>
|
|
<p className="mt-4 sm:mt-6 text-base sm:text-lg text-gray-400">
|
|
These features are in development. Join the community to help shape what gets built first
|
|
</p>
|
|
</div>
|
|
</Container>
|
|
<div className="mx-auto mt-8 sm:mt-12 md:mt-16 grid max-w-2xl grid-cols-1 gap-10 sm:gap-12 md:gap-16 lg:max-w-none lg:grid-cols-2 xl:grid-cols-3">
|
|
{features.map((feature, index) => (
|
|
<FeatureCard key={feature.title} feature={feature} index={index} />
|
|
))}
|
|
</div>
|
|
</Container>
|
|
</Section>
|
|
);
|
|
} |