diff --git a/src/pages/theme-pages/SocialChoice.tsx b/src/pages/theme-pages/SocialChoice.tsx index 5886fae..b3299cc 100644 --- a/src/pages/theme-pages/SocialChoice.tsx +++ b/src/pages/theme-pages/SocialChoice.tsx @@ -1,12 +1,125 @@ -import ComingSoon from "@/components/ComingSoon"; +import { Link } from "react-router-dom"; +import Layout from "@/components/Layout"; +import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; +import { Badge } from "@/components/ui/badge"; +import { Users, Vote, Scale, Puzzle } from "lucide-react"; + +interface Interactive { + id: string; + title: string; + description: string; + path: string; + tags: string[]; + icon: React.ComponentType<{ className?: string }>; +} + +const interactives: Interactive[] = [ + { + id: "rent-division", + title: "Envy-Free Rent Division", + description: "Explore fair division by assigning rooms and setting rents. Can you find an allocation where no one envies another?", + path: "/themes/social-choice/rent-division", + tags: ["fair-division", "envy-free", "allocation", "game-theory"], + icon: Users, + }, +]; + +const comingSoon: { title: string; description: string; icon: React.ComponentType<{ className?: string }> }[] = [ + { + title: "Voting Systems", + description: "Compare plurality, ranked-choice, Borda count, and other voting methods through interactive elections.", + icon: Vote, + }, + { + title: "Arrow's Theorem", + description: "Discover why no voting system can satisfy all fairness criteria simultaneously.", + icon: Scale, + }, + { + title: "Stable Matching", + description: "Explore the Gale-Shapley algorithm and the stable marriage problem.", + icon: Puzzle, + }, +]; const SocialChoice = () => { return ( - + +
+
+
+

Social Choice Theory

+

+ Understand voting systems, fairness criteria, and collective decision-making through + interactive simulations. Explore how groups make decisions and the mathematical + principles behind fair allocation. +

+
+ + {/* Available Interactives */} +
+

Interactives

+
+ {interactives.map((item) => { + const Icon = item.icon; + return ( + + + +
+
+ +
+ {item.title} +
+ + {item.description} + +
+ +
+ {item.tags.map((tag) => ( + + {tag} + + ))} +
+
+
+ + ); + })} +
+
+ + {/* Coming Soon */} +
+

Coming Soon

+
+ {comingSoon.map((item) => { + const Icon = item.icon; + return ( + + +
+
+ +
+ {item.title} +
+ + {item.description} + +
+
+ ); + })} +
+
+
+
+
); }; -export default SocialChoice; \ No newline at end of file +export default SocialChoice;