The ultimate community archive for Goose history.
- Discover shows, rate performances, and connect with fans.
+ Discover shows, rate performances, and find the heady versions.
-
+
diff --git a/frontend/app/performances/page.tsx b/frontend/app/performances/page.tsx
new file mode 100644
index 0000000..1efed07
--- /dev/null
+++ b/frontend/app/performances/page.tsx
@@ -0,0 +1,142 @@
+import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card"
+import { Badge } from "@/components/ui/badge"
+import { Trophy, Star, Calendar, MapPin, ExternalLink } from "lucide-react"
+import Link from "next/link"
+import { getApiUrl } from "@/lib/api-config"
+
+interface TopPerformance {
+ performance: {
+ id: number
+ position: number
+ set_name: string
+ notes?: string
+ youtube_link?: string
+ }
+ song: {
+ id: number
+ title: string
+ }
+ show: {
+ id: number
+ date: string
+ }
+ venue: {
+ id: number
+ name: string
+ city: string
+ state?: string
+ }
+ avg_score: number
+ rating_count: number
+}
+
+async function getTopPerformances(): Promise {
+ try {
+ const res = await fetch(`${getApiUrl()}/leaderboards/performances/top?limit=50`, {
+ cache: 'no-store'
+ })
+ if (!res.ok) return []
+ return res.json()
+ } catch (e) {
+ console.error('Failed to fetch top performances:', e)
+ return []
+ }
+}
+
+export default async function PerformancesPage() {
+ const performances = await getTopPerformances()
+
+ return (
+
+
+
+
+ Heady Versions
+
+
+ The top-rated performances as voted by the community
+