fediversion/frontend/app/[vertical]/page.tsx
fullsizemalt 29c5d30ebb feat: Add multi-vertical frontend infrastructure
Phase 3 - Frontend Multi-Vertical Support:
- Add VerticalContext for band state management
- Add BandSelector dropdown component
- Create dynamic [vertical] routes for shows, songs, venues
- Update navbar to use band selector and vertical-aware links
- Update api-config.ts for Fediversion domain
- Rebrand from Elmeg to Fediversion
2025-12-28 13:56:22 -08:00

60 lines
2.2 KiB
TypeScript

import { notFound } from "next/navigation"
import { VERTICALS } from "@/contexts/vertical-context"
interface Props {
params: { vertical: string }
}
export function generateStaticParams() {
return VERTICALS.map((v) => ({
vertical: v.slug,
}))
}
export default function VerticalPage({ params }: Props) {
const vertical = VERTICALS.find((v) => v.slug === params.vertical)
if (!vertical) {
notFound()
}
return (
<div className="space-y-8">
<div className="text-center space-y-4">
<h1 className="text-4xl font-bold flex items-center justify-center gap-4">
<span className="text-5xl">{vertical.emoji}</span>
<span style={{ color: vertical.color }}>{vertical.name}</span>
</h1>
<p className="text-muted-foreground max-w-2xl mx-auto">
Explore setlists, rate performances, and connect with the {vertical.name} community.
</p>
</div>
<div className="grid grid-cols-1 md:grid-cols-3 gap-6">
<a
href={`/${vertical.slug}/shows`}
className="block p-6 rounded-lg border bg-card hover:bg-accent transition-colors"
>
<h2 className="text-xl font-semibold mb-2">Shows</h2>
<p className="text-muted-foreground">Browse all concerts and setlists</p>
</a>
<a
href={`/${vertical.slug}/songs`}
className="block p-6 rounded-lg border bg-card hover:bg-accent transition-colors"
>
<h2 className="text-xl font-semibold mb-2">Songs</h2>
<p className="text-muted-foreground">Explore the catalog and stats</p>
</a>
<a
href={`/${vertical.slug}/venues`}
className="block p-6 rounded-lg border bg-card hover:bg-accent transition-colors"
>
<h2 className="text-xl font-semibold mb-2">Venues</h2>
<p className="text-muted-foreground">See where they've played</p>
</a>
</div>
</div>
)
}