Build GameForgeJoinGameForge - Team showcase and culture
cgen-f333dc36c2dd4d149dff0f1ef75be018
This commit is contained in:
parent
9a76f9561b
commit
99a0adaca8
1 changed files with 104 additions and 175 deletions
|
|
@ -2,96 +2,45 @@ import Layout from "@/components/Layout";
|
||||||
import { Button } from "@/components/ui/button";
|
import { Button } from "@/components/ui/button";
|
||||||
import { Badge } from "@/components/ui/badge";
|
import { Badge } from "@/components/ui/badge";
|
||||||
import { Card, CardContent } from "@/components/ui/card";
|
import { Card, CardContent } from "@/components/ui/card";
|
||||||
import { Users, CheckCircle, Quote } from "lucide-react";
|
import { Users, Zap, Heart, ArrowRight } from "lucide-react";
|
||||||
import { useNavigate } from "react-router-dom";
|
import { useNavigate } from "react-router-dom";
|
||||||
|
|
||||||
interface TeamMember {
|
|
||||||
id: number;
|
|
||||||
name: string;
|
|
||||||
role: string;
|
|
||||||
bio: string;
|
|
||||||
expertise: string[];
|
|
||||||
image: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
interface Testimonial {
|
|
||||||
id: number;
|
|
||||||
author: string;
|
|
||||||
role: string;
|
|
||||||
company: string;
|
|
||||||
quote: string;
|
|
||||||
result: string;
|
|
||||||
}
|
|
||||||
|
|
||||||
const TEAM_MEMBERS: TeamMember[] = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
name: "Sarah Chen",
|
|
||||||
role: "Lead Developer",
|
|
||||||
bio: "15+ years in game development. Previously shipped 20+ titles.",
|
|
||||||
expertise: ["Game Architecture", "Performance", "Team Leadership"],
|
|
||||||
image: "https://via.placeholder.com/150/22c55e/000000?text=SC",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
name: "Marcus Johnson",
|
|
||||||
role: "Community Lead",
|
|
||||||
bio: "Built communities with 100k+ active developers across platforms.",
|
|
||||||
expertise: ["Community Building", "Mentorship", "Events"],
|
|
||||||
image: "https://via.placeholder.com/150/22c55e/000000?text=MJ",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
name: "Elena Rodriguez",
|
|
||||||
role: "Product Manager",
|
|
||||||
bio: "Passionate about making game dev tools accessible to everyone.",
|
|
||||||
expertise: ["Product Strategy", "UX Design", "Developer Experience"],
|
|
||||||
image: "https://via.placeholder.com/150/22c55e/000000?text=ER",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const TESTIMONIALS: Testimonial[] = [
|
|
||||||
{
|
|
||||||
id: 1,
|
|
||||||
author: "James Park",
|
|
||||||
role: "Indie Developer",
|
|
||||||
company: "Park Studios",
|
|
||||||
quote:
|
|
||||||
"GameForge transformed how we ship games. Monthly releases that used to take quarters are now our standard.",
|
|
||||||
result: "+300% faster development cycle",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 2,
|
|
||||||
author: "Olivia Smith",
|
|
||||||
role: "Game Designer",
|
|
||||||
company: "Creative Digital",
|
|
||||||
quote:
|
|
||||||
"The community support and resources made all the difference. I went from zero to published in 6 months.",
|
|
||||||
result: "1st game launched successfully",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
id: 3,
|
|
||||||
author: "David Kumar",
|
|
||||||
role: "Technical Lead",
|
|
||||||
company: "Quantum Games",
|
|
||||||
quote:
|
|
||||||
"Best decision we made was joining GameForge. The tooling alone saved us months of development time.",
|
|
||||||
result: "Saved 4 months of dev time",
|
|
||||||
},
|
|
||||||
];
|
|
||||||
|
|
||||||
const MEMBERSHIP_BENEFITS = [
|
|
||||||
"Priority access to new features and tools",
|
|
||||||
"Monthly revenue sharing from successful games",
|
|
||||||
"Dedicated technical support and mentorship",
|
|
||||||
"Featured placement in our game gallery",
|
|
||||||
"Access to exclusive GameForge community events",
|
|
||||||
"Co-marketing opportunities with AeThex",
|
|
||||||
];
|
|
||||||
|
|
||||||
export default function GameForgeJoinGameForge() {
|
export default function GameForgeJoinGameForge() {
|
||||||
const navigate = useNavigate();
|
const navigate = useNavigate();
|
||||||
|
|
||||||
|
const team = [
|
||||||
|
{
|
||||||
|
name: "Alex Turner",
|
||||||
|
role: "Game Director",
|
||||||
|
expertise: ["Game Design", "Team Leadership", "Player Psychology"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Sam Lee",
|
||||||
|
role: "Lead Programmer",
|
||||||
|
expertise: ["Gameplay Systems", "Networking", "Performance"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Jordan Davis",
|
||||||
|
role: "Art Director",
|
||||||
|
expertise: ["Visual Design", "Animation", "Aesthetics"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Casey Williams",
|
||||||
|
role: "Producer",
|
||||||
|
expertise: ["Project Management", "Shipping", "Strategy"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Morgan Smith",
|
||||||
|
role: "QA Lead",
|
||||||
|
expertise: ["Quality Assurance", "Testing", "Optimization"],
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "Riley Chen",
|
||||||
|
role: "Sound Designer",
|
||||||
|
expertise: ["Audio Design", "Music", "Polish"],
|
||||||
|
},
|
||||||
|
];
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Layout>
|
<Layout>
|
||||||
<div className="relative min-h-screen bg-black text-white overflow-hidden">
|
<div className="relative min-h-screen bg-black text-white overflow-hidden">
|
||||||
|
|
@ -102,8 +51,7 @@ export default function GameForgeJoinGameForge() {
|
||||||
<div className="pointer-events-none absolute bottom-20 right-10 w-72 h-72 bg-green-600/10 rounded-full blur-3xl animate-blob animation-delay-2000" />
|
<div className="pointer-events-none absolute bottom-20 right-10 w-72 h-72 bg-green-600/10 rounded-full blur-3xl animate-blob animation-delay-2000" />
|
||||||
|
|
||||||
<main className="relative z-10">
|
<main className="relative z-10">
|
||||||
{/* Header */}
|
<section className="py-16">
|
||||||
<section className="py-16 lg:py-20">
|
|
||||||
<div className="container mx-auto max-w-6xl px-4">
|
<div className="container mx-auto max-w-6xl px-4">
|
||||||
<Button
|
<Button
|
||||||
variant="ghost"
|
variant="ghost"
|
||||||
|
|
@ -113,56 +61,41 @@ export default function GameForgeJoinGameForge() {
|
||||||
← Back to GameForge
|
← Back to GameForge
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Badge className="border-green-400/40 bg-green-500/10 text-green-300 shadow-[0_0_20px_rgba(34,197,94,0.2)] mb-4">
|
<h1 className="text-4xl lg:text-5xl font-black text-green-300 mb-4">
|
||||||
<Users className="h-4 w-4 mr-2" />
|
The Team
|
||||||
Join Our Community
|
|
||||||
</Badge>
|
|
||||||
<h1 className="text-4xl font-black text-green-300 mb-4 lg:text-5xl">
|
|
||||||
Become a GameForge Member
|
|
||||||
</h1>
|
</h1>
|
||||||
<p className="text-lg text-green-100/80 max-w-2xl">
|
<p className="text-lg text-green-100/80 max-w-3xl">
|
||||||
Join thousands of developers who are shipping games faster,
|
The talented developers, designers, and producers who ship a game every month.
|
||||||
building stronger products, and growing their audiences.
|
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Meet the Team */}
|
<section className="py-16">
|
||||||
<section className="py-16 border-y border-green-400/10 bg-black/40">
|
|
||||||
<div className="container mx-auto max-w-6xl px-4">
|
<div className="container mx-auto max-w-6xl px-4">
|
||||||
<h2 className="text-3xl font-bold text-green-300 mb-12">
|
<div className="grid md:grid-cols-2 lg:grid-cols-3 gap-6">
|
||||||
Meet the Team
|
{team.map((member, idx) => (
|
||||||
</h2>
|
|
||||||
<div className="grid md:grid-cols-3 gap-8">
|
|
||||||
{TEAM_MEMBERS.map((member) => (
|
|
||||||
<Card
|
<Card
|
||||||
key={member.id}
|
key={idx}
|
||||||
className="bg-green-950/20 border-green-400/30 overflow-hidden"
|
className="bg-green-950/20 border-green-400/30"
|
||||||
>
|
>
|
||||||
<div className="h-40 bg-gradient-to-b from-green-500/20 to-transparent flex items-center justify-center">
|
<CardContent className="pt-6">
|
||||||
<div className="w-24 h-24 rounded-full bg-green-400/20 border border-green-400/40 flex items-center justify-center text-2xl font-bold text-green-300">
|
<div className="w-12 h-12 rounded-full bg-gradient-to-r from-green-500 to-emerald-500 flex items-center justify-center text-white font-bold mb-3">
|
||||||
{member.name
|
{member.name.split(" ").map(n => n[0]).join("")}
|
||||||
.split(" ")
|
|
||||||
.map((n) => n[0])
|
|
||||||
.join("")}
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
<h3 className="text-lg font-bold text-green-300 mb-1">
|
||||||
<CardContent className="pt-6 space-y-4">
|
{member.name}
|
||||||
<div>
|
</h3>
|
||||||
<h3 className="text-lg font-bold text-green-300">
|
<p className="text-sm text-green-400 font-medium mb-4">
|
||||||
{member.name}
|
{member.role}
|
||||||
</h3>
|
</p>
|
||||||
<p className="text-sm text-green-400">{member.role}</p>
|
<div className="flex flex-wrap gap-2">
|
||||||
</div>
|
{member.expertise.map((exp, i) => (
|
||||||
<p className="text-sm text-green-200/70">{member.bio}</p>
|
<Badge
|
||||||
<div className="space-y-2">
|
key={i}
|
||||||
{member.expertise.map((skill, idx) => (
|
className="bg-green-500/20 text-green-300 border border-green-400/40 text-xs"
|
||||||
<span
|
|
||||||
key={idx}
|
|
||||||
className="inline-block px-2 py-1 text-xs bg-green-500/10 border border-green-400/30 rounded text-green-300 mr-2"
|
|
||||||
>
|
>
|
||||||
{skill}
|
{exp}
|
||||||
</span>
|
</Badge>
|
||||||
))}
|
))}
|
||||||
</div>
|
</div>
|
||||||
</CardContent>
|
</CardContent>
|
||||||
|
|
@ -172,38 +105,43 @@ export default function GameForgeJoinGameForge() {
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Success Stories */}
|
<section className="py-16 border-t border-green-400/10 bg-black/40">
|
||||||
<section className="py-16">
|
|
||||||
<div className="container mx-auto max-w-6xl px-4">
|
<div className="container mx-auto max-w-6xl px-4">
|
||||||
<h2 className="text-3xl font-bold text-green-300 mb-12">
|
<h2 className="text-3xl font-bold text-green-300 mb-8">
|
||||||
Success Stories
|
GameForge Culture
|
||||||
</h2>
|
</h2>
|
||||||
<div className="grid lg:grid-cols-2 gap-6">
|
<div className="grid md:grid-cols-3 gap-6">
|
||||||
{TESTIMONIALS.map((testimonial) => (
|
{[
|
||||||
|
{
|
||||||
|
icon: <Zap className="h-6 w-6" />,
|
||||||
|
title: "Ship Every Month",
|
||||||
|
description: "We deliver a complete, polished game every month",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <Heart className="h-6 w-6" />,
|
||||||
|
title: "Love What You Make",
|
||||||
|
description: "We care about quality and player experience",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
icon: <Users className="h-6 w-6" />,
|
||||||
|
title: "Together",
|
||||||
|
description: "Cross-functional teams working toward one goal",
|
||||||
|
},
|
||||||
|
].map((item, idx) => (
|
||||||
<Card
|
<Card
|
||||||
key={testimonial.id}
|
key={idx}
|
||||||
className="bg-green-950/20 border-green-400/30"
|
className="bg-green-950/20 border-green-400/30"
|
||||||
>
|
>
|
||||||
<CardContent className="pt-6">
|
<CardContent className="pt-6 text-center">
|
||||||
<div className="flex gap-2 mb-4">
|
<div className="text-green-400 mb-3 flex justify-center">
|
||||||
<Quote className="h-5 w-5 text-green-400 flex-shrink-0" />
|
{item.icon}
|
||||||
</div>
|
</div>
|
||||||
<p className="text-green-100 mb-4 italic">
|
<h3 className="font-bold text-green-300 mb-2">
|
||||||
"{testimonial.quote}"
|
{item.title}
|
||||||
|
</h3>
|
||||||
|
<p className="text-sm text-green-200/70">
|
||||||
|
{item.description}
|
||||||
</p>
|
</p>
|
||||||
<div className="space-y-3 pt-4 border-t border-green-400/10">
|
|
||||||
<div>
|
|
||||||
<p className="font-semibold text-green-300">
|
|
||||||
{testimonial.author}
|
|
||||||
</p>
|
|
||||||
<p className="text-sm text-green-200/70">
|
|
||||||
{testimonial.role} at {testimonial.company}
|
|
||||||
</p>
|
|
||||||
</div>
|
|
||||||
<Badge className="bg-green-500/20 border border-green-400/40 text-green-300">
|
|
||||||
{testimonial.result}
|
|
||||||
</Badge>
|
|
||||||
</div>
|
|
||||||
</CardContent>
|
</CardContent>
|
||||||
</Card>
|
</Card>
|
||||||
))}
|
))}
|
||||||
|
|
@ -211,30 +149,21 @@ export default function GameForgeJoinGameForge() {
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
{/* Membership Benefits */}
|
<section className="py-16 border-t border-green-400/10">
|
||||||
<section className="py-16 border-t border-green-400/10 bg-black/40">
|
<div className="container mx-auto max-w-4xl px-4 text-center">
|
||||||
<div className="container mx-auto max-w-6xl px-4">
|
<h2 className="text-3xl font-bold text-green-300 mb-4">
|
||||||
<h2 className="text-3xl font-bold text-green-300 mb-12">
|
Join the Team
|
||||||
Membership Benefits
|
|
||||||
</h2>
|
</h2>
|
||||||
<div className="grid md:grid-cols-2 gap-6 mb-12">
|
<p className="text-lg text-green-100/80 mb-8">
|
||||||
{MEMBERSHIP_BENEFITS.map((benefit, idx) => (
|
Interested in shipping games with us?
|
||||||
<div key={idx} className="flex gap-4 items-start">
|
</p>
|
||||||
<CheckCircle className="h-6 w-6 text-green-400 flex-shrink-0 mt-0.5" />
|
<Button
|
||||||
<span className="text-green-100">{benefit}</span>
|
className="bg-green-400 text-black hover:bg-green-300"
|
||||||
</div>
|
onClick={() => navigate("/careers")}
|
||||||
))}
|
>
|
||||||
</div>
|
View Positions
|
||||||
|
<ArrowRight className="ml-2 h-4 w-4" />
|
||||||
{/* CTA */}
|
</Button>
|
||||||
<div className="text-center">
|
|
||||||
<p className="text-lg text-green-100/80 mb-6">
|
|
||||||
Ready to ship faster and build better games?
|
|
||||||
</p>
|
|
||||||
<Button className="bg-green-400 text-black shadow-[0_0_30px_rgba(34,197,94,0.35)] hover:bg-green-300 px-8 py-6 text-lg">
|
|
||||||
Apply for Membership
|
|
||||||
</Button>
|
|
||||||
</div>
|
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
</main>
|
</main>
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue