Create FoundationLearnMore.tsx

cgen-b2ea7da21beb4d5eb80716c20cd07887
This commit is contained in:
Builder.io 2025-11-07 23:48:24 +00:00
parent 184d8633d7
commit 947ccd35b4

View file

@ -2,77 +2,156 @@ import Layout from "@/components/Layout";
import { Button } from "@/components/ui/button";
import { Badge } from "@/components/ui/badge";
import { Card, CardContent } from "@/components/ui/card";
import { BookOpen, Video, Code, Users, ArrowRight, GraduationCap } from "lucide-react";
import {
BookOpen,
Play,
FileText,
Code,
ArrowRight,
Download,
} from "lucide-react";
import { useNavigate } from "react-router-dom";
export default function FoundationLearnMore() {
const navigate = useNavigate();
const learningPaths = [
const resources = [
{
id: 1,
title: "Game Development Fundamentals",
description: "Master the core concepts and best practices",
duration: "6 weeks",
level: "Beginner",
format: "Video Course",
modules: 12,
type: "Video Course",
icon: Play,
description:
"Complete introduction to game development concepts and best practices",
lessons: "50",
duration: "20 hours",
topics: [
"Game loops",
"Physics",
"Input handling",
"Asset management",
],
free: true,
},
{
title: "Roblox Development Mastery",
description: "Build professional Roblox experiences",
duration: "8 weeks",
level: "Intermediate",
format: "Interactive Tutorial",
modules: 16,
id: 2,
title: "Roblox Best Practices Guide",
type: "Written Guide",
icon: FileText,
description:
"Comprehensive guide to building professional Roblox experiences",
pages: "120",
downloads: "10K+",
topics: [
"Server architecture",
"Security practices",
"Performance tips",
"UI/UX patterns",
],
free: true,
},
{
title: "Advanced Game Architecture",
description: "Scalable systems and optimization",
duration: "10 weeks",
level: "Advanced",
format: "Project-Based",
modules: 20,
id: 3,
title: "Architecture Patterns for Games",
type: "Interactive Tutorial",
icon: Code,
description:
"Learn scalable architectural patterns used in professional game development",
modules: "8",
projects: "4",
topics: [
"MVC pattern",
"ECS systems",
"Networking",
"State management",
],
free: true,
},
{
title: "Game Art & Animation",
description: "Create stunning visuals and smooth animations",
duration: "7 weeks",
level: "Intermediate",
format: "Video Tutorials",
modules: 14,
id: 4,
title: "Performance Optimization Handbook",
type: "Technical Reference",
icon: BookOpen,
description:
"In-depth guide to optimizing game performance and reducing latency",
chapters: "15",
samples: "100+",
topics: [
"Memory optimization",
"GPU optimization",
"Network optimization",
"Profiling tools",
],
free: true,
},
];
const resources = [
const workshops = [
{
type: "Documentation",
icon: <BookOpen className="h-6 w-6" />,
count: "50+",
description: "Guides and API reference",
title: "Intro to Roblox Development",
schedule: "Every Saturday",
time: "2 hours",
level: "Beginner",
attendees: "150+/month",
nextDate: "Jan 18, 2025",
},
{
type: "Video Tutorials",
icon: <Video className="h-6 w-6" />,
count: "200+",
description: "Hours of content",
title: "Advanced Game Architecture",
schedule: "Monthly (2nd Friday)",
time: "4 hours",
level: "Advanced",
attendees: "50+/month",
nextDate: "Feb 14, 2025",
},
{
type: "Code Examples",
icon: <Code className="h-6 w-6" />,
count: "100+",
description: "Ready-to-use code",
title: "Multiplayer Game Design",
schedule: "Bi-weekly (Thursdays)",
time: "2 hours",
level: "Intermediate",
attendees: "100+/month",
nextDate: "Jan 23, 2025",
},
{
type: "Community",
icon: <Users className="h-6 w-6" />,
count: "50K+",
description: "Active developers",
title: "Performance & Optimization",
schedule: "Monthly (3rd Wednesday)",
time: "3 hours",
level: "Intermediate",
attendees: "75+/month",
nextDate: "Jan 15, 2025",
},
];
const curriculumPaths = [
{
name: "Beginner Game Developer",
duration: "8 weeks",
modules: 8,
description: "Start your game development journey from scratch",
},
{
name: "Roblox Professional",
duration: "12 weeks",
modules: 12,
description: "Master Roblox development for professional work",
},
{
name: "Multiplayer Expert",
duration: "10 weeks",
modules: 10,
description: "Learn to build complex multiplayer systems",
},
{
name: "Game Architecture Master",
duration: "14 weeks",
modules: 14,
description: "Design scalable systems for production games",
},
];
return (
<Layout>
<div className="relative min-h-screen bg-black text-white overflow-hidden">
{/* Background */}
<div className="pointer-events-none absolute inset-0 opacity-[0.12] [background-image:radial-gradient(circle_at_top,#ef4444_0,rgba(0,0,0,0.45)_55%,rgba(0,0,0,0.9)_100%)]" />
<div className="pointer-events-none absolute inset-0 bg-[linear-gradient(transparent_0,transparent_calc(100%-1px),rgba(239,68,68,0.05)_calc(100%-1px))] bg-[length:100%_32px]" />
<div className="pointer-events-none absolute inset-0 opacity-[0.08] [background-image:linear-gradient(90deg,rgba(239,68,68,0.1)_1px,transparent_1px),linear-gradient(0deg,rgba(239,68,68,0.1)_1px,transparent_1px)] [background-size:50px_50px] animate-pulse" />
@ -80,6 +159,7 @@ export default function FoundationLearnMore() {
<div className="pointer-events-none absolute bottom-20 right-10 w-72 h-72 bg-red-600/10 rounded-full blur-3xl animate-blob animation-delay-2000" />
<main className="relative z-10">
{/* Header */}
<section className="py-16">
<div className="container mx-auto max-w-6xl px-4">
<Button
@ -91,53 +171,187 @@ export default function FoundationLearnMore() {
</Button>
<h1 className="text-4xl lg:text-5xl font-black text-red-300 mb-4">
Learning Resources
Free Learning Resources
</h1>
<p className="text-lg text-red-100/80 max-w-3xl">
Free educational content to help you master game development and Roblox.
Learn game development from the ground up with our free, comprehensive educational resources. Everything you need to become an expert developer.
</p>
</div>
</section>
{/* Featured Resources */}
<section className="py-16">
<div className="container mx-auto max-w-6xl px-4">
<h2 className="text-3xl font-bold text-red-300 mb-8">
Featured Resources
</h2>
<div className="grid md:grid-cols-2 gap-6">
{resources.map((resource) => {
const Icon = resource.icon;
return (
<Card
key={resource.id}
className="bg-red-950/20 border-red-400/30 hover:border-red-400/60 transition-all"
>
<CardContent className="pt-6">
<div className="flex items-start justify-between mb-4">
<Icon className="h-8 w-8 text-red-400" />
<Badge className="bg-red-500/20 text-red-300 border border-red-400/40">
{resource.type}
</Badge>
</div>
<h3 className="text-lg font-bold text-red-300 mb-2">
{resource.title}
</h3>
<p className="text-sm text-red-200/70 mb-4">
{resource.description}
</p>
<div className="grid grid-cols-2 gap-3 mb-4 py-4 border-y border-red-400/10">
{resource.lessons && (
<div>
<p className="text-xs text-red-400 font-semibold">
LESSONS
</p>
<p className="text-red-300 font-bold">
{resource.lessons}
</p>
</div>
)}
{resource.duration && (
<div>
<p className="text-xs text-red-400 font-semibold">
DURATION
</p>
<p className="text-red-300 font-bold">
{resource.duration}
</p>
</div>
)}
{resource.pages && (
<div>
<p className="text-xs text-red-400 font-semibold">
PAGES
</p>
<p className="text-red-300 font-bold">
{resource.pages}
</p>
</div>
)}
{resource.downloads && (
<div>
<p className="text-xs text-red-400 font-semibold">
DOWNLOADS
</p>
<p className="text-red-300 font-bold">
{resource.downloads}
</p>
</div>
)}
{resource.modules && (
<div>
<p className="text-xs text-red-400 font-semibold">
MODULES
</p>
<p className="text-red-300 font-bold">
{resource.modules}
</p>
</div>
)}
{resource.projects && (
<div>
<p className="text-xs text-red-400 font-semibold">
PROJECTS
</p>
<p className="text-red-300 font-bold">
{resource.projects}
</p>
</div>
)}
{resource.chapters && (
<div>
<p className="text-xs text-red-400 font-semibold">
CHAPTERS
</p>
<p className="text-red-300 font-bold">
{resource.chapters}
</p>
</div>
)}
{resource.samples && (
<div>
<p className="text-xs text-red-400 font-semibold">
CODE SAMPLES
</p>
<p className="text-red-300 font-bold">
{resource.samples}
</p>
</div>
)}
</div>
<div className="mb-4">
<p className="text-xs text-red-400 font-semibold mb-2">
TOPICS
</p>
<div className="flex flex-wrap gap-2">
{resource.topics.map((topic, idx) => (
<Badge
key={idx}
className="bg-red-500/20 text-red-300 border border-red-400/40 text-xs"
>
{topic}
</Badge>
))}
</div>
</div>
<Button
className="w-full bg-red-400 text-black hover:bg-red-300"
size="sm"
>
<Download className="h-4 w-4 mr-2" />
Get Resource
</Button>
</CardContent>
</Card>
);
})}
</div>
</div>
</section>
{/* Learning Paths */}
<section className="py-16 border-t border-red-400/10 bg-black/40">
<div className="container mx-auto max-w-6xl px-4">
<h2 className="text-3xl font-bold text-red-300 mb-8">
Learning Paths
</h2>
<div className="grid md:grid-cols-2 gap-6">
{learningPaths.map((path, idx) => (
<Card
key={idx}
className="bg-red-950/20 border-red-400/30 hover:border-red-400/60 transition-all"
>
<CardContent className="pt-6 space-y-4">
<div>
<h3 className="text-lg font-bold text-red-300 mb-1">
{path.title}
{curriculumPaths.map((path, idx) => (
<Card key={idx} className="bg-red-950/20 border-red-400/30">
<CardContent className="pt-6">
<div className="flex items-start justify-between mb-3">
<h3 className="text-lg font-bold text-red-300">
{path.name}
</h3>
<p className="text-sm text-red-200/70">
{path.description}
<Badge className="bg-red-500/20 text-red-300 border border-red-400/40">
{path.modules} modules
</Badge>
</div>
<p className="text-sm text-red-200/70 mb-4">
{path.description}
</p>
<div className="flex items-center justify-between">
<p className="text-xs text-red-400 font-semibold">
Duration: {path.duration}
</p>
</div>
<div className="flex flex-wrap gap-2">
<Badge className="bg-red-500/20 text-red-300 border border-red-400/40 text-xs">
{path.level}
</Badge>
<Badge className="bg-red-500/20 text-red-300 border border-red-400/40 text-xs">
{path.format}
</Badge>
</div>
<div className="pt-4 border-t border-red-400/10 space-y-2">
<div className="text-xs text-red-400 font-semibold">
{path.duration} {path.modules} modules
</div>
<Button
className="w-full bg-red-400 text-black hover:bg-red-300"
variant="ghost"
size="sm"
className="text-red-300 hover:bg-red-500/10"
>
Start Learning
Start
</Button>
</div>
</CardContent>
@ -147,30 +361,57 @@ export default function FoundationLearnMore() {
</div>
</section>
<section className="py-16 border-t border-red-400/10 bg-black/40">
{/* Workshops */}
<section className="py-16">
<div className="container mx-auto max-w-6xl px-4">
<h2 className="text-3xl font-bold text-red-300 mb-8">
What's Included
Upcoming Workshops
</h2>
<div className="grid md:grid-cols-2 lg:grid-cols-4 gap-6">
{resources.map((resource, idx) => (
<div className="space-y-4">
{workshops.map((workshop, idx) => (
<Card
key={idx}
className="bg-red-950/20 border-red-400/30 text-center"
className="bg-red-950/20 border-red-400/30 hover:border-red-400/60 transition-all"
>
<CardContent className="pt-6">
<div className="text-red-400 mb-3 flex justify-center">
{resource.icon}
<div className="grid md:grid-cols-2 lg:grid-cols-5 gap-4">
<div>
<p className="text-xs font-semibold text-red-400 mb-1">
WORKSHOP
</p>
<p className="font-bold text-red-300">
{workshop.title}
</p>
</div>
<div>
<p className="text-xs font-semibold text-red-400 mb-1">
NEXT DATE
</p>
<p className="text-red-300">{workshop.nextDate}</p>
</div>
<div>
<p className="text-xs font-semibold text-red-400 mb-1">
DURATION
</p>
<p className="text-red-300">{workshop.time}</p>
</div>
<div>
<p className="text-xs font-semibold text-red-400 mb-1">
LEVEL
</p>
<Badge className="bg-red-500/20 text-red-300 border border-red-400/40">
{workshop.level}
</Badge>
</div>
<div className="flex items-end">
<Button
className="w-full bg-red-400 text-black hover:bg-red-300"
size="sm"
>
Register
</Button>
</div>
</div>
<p className="text-2xl font-black text-red-300 mb-1">
{resource.count}
</p>
<p className="text-xs font-semibold text-red-400 mb-1">
{resource.type}
</p>
<p className="text-xs text-red-200/70">
{resource.description}
</p>
</CardContent>
</Card>
))}
@ -178,18 +419,21 @@ export default function FoundationLearnMore() {
</div>
</section>
{/* CTA */}
<section className="py-16 border-t border-red-400/10">
<div className="container mx-auto max-w-4xl px-4 text-center">
<h2 className="text-3xl font-bold text-red-300 mb-4">
Start Your Journey
Start Your Learning Journey
</h2>
<p className="text-lg text-red-100/80 mb-8">
Choose a learning path and begin mastering game development.
Choose a learning path and begin mastering game development today.
Everything is completely free and open to the community.
</p>
<Button
className="bg-red-400 text-black hover:bg-red-300"
className="bg-red-400 text-black shadow-[0_0_30px_rgba(239,68,68,0.35)] hover:bg-red-300"
onClick={() => navigate("/foundation/get-involved")}
>
Browse All Courses
Explore More Ways to Contribute
<ArrowRight className="ml-2 h-4 w-4" />
</Button>
</div>