diff --git a/frontend/app/not-found.tsx b/frontend/app/not-found.tsx index e762d7f..413c07b 100644 --- a/frontend/app/not-found.tsx +++ b/frontend/app/not-found.tsx @@ -1,43 +1,127 @@ +"use client" + import Link from "next/link" import { Button } from "@/components/ui/button" -import { Home, ArrowLeft, Search } from "lucide-react" +import { Home, Search, Shuffle, ArrowLeft, Music, Disc3 } from "lucide-react" +import { useState, useEffect } from "react" + +const GOOSE_QUOTES = [ + "Looks like this page flew the coop!", + "Honk if you're lost too!", + "This page has migrated to parts unknown.", + "The jam you seek is not in this location.", + "404: Page not found. But hey, at least the vibes are good.", + "This URL took a wrong turn at Tumble.", + "Flodown? More like FlowGONE.", + "Seems this page is still in the Dripfield.", + "The set break got a little too long...", + "Whoops! Someone put this page in the wrong set.", +] + +const SONG_SUGGESTIONS = [ + { title: "Tumble", slug: "tumble" }, + { title: "Arcadia", slug: "arcadia" }, + { title: "Hungersite", slug: "hungersite" }, + { title: "Atlas Dogs", slug: "atlas-dogs" }, + { title: "Rockdale", slug: "rockdale" }, +] export default function NotFound() { + const [quote, setQuote] = useState("") + const [suggestion, setSuggestion] = useState(SONG_SUGGESTIONS[0]) + const [isSpinning, setIsSpinning] = useState(false) + + useEffect(() => { + // Random quote on mount + setQuote(GOOSE_QUOTES[Math.floor(Math.random() * GOOSE_QUOTES.length)]) + setSuggestion(SONG_SUGGESTIONS[Math.floor(Math.random() * SONG_SUGGESTIONS.length)]) + }, []) + + const shuffleQuote = () => { + setIsSpinning(true) + setTimeout(() => { + setQuote(GOOSE_QUOTES[Math.floor(Math.random() * GOOSE_QUOTES.length)]) + setSuggestion(SONG_SUGGESTIONS[Math.floor(Math.random() * SONG_SUGGESTIONS.length)]) + setIsSpinning(false) + }, 300) + } + return ( -
-
-
404
- -
-

Page Not Found

-

- The page you're looking for doesn't exist or may have been moved. -

+
+ {/* Animated Goose/Music Icon */} +
+
+
- -
- - -
- -

- Looking for a specific show? Try the{" "} - - shows page - {" "} - or use the search. -

+ + 🪿 +
+ + {/* 404 Header */} +
+ + 404 + +
+ + {/* Playful Quote */} +

+ {quote} +

+ +

+ Click the goose for a new message ☝️ +

+ + {/* Action Buttons */} +
+ + + + + + + +
+ + {/* Song Suggestion Card */} +
+

+ While you're here, maybe check out: +

+ +
+ +
+
+

{suggestion.title}

+

Random song suggestion

+
+ +
+ + {/* Back Link */} +
) } diff --git a/frontend/app/shows/[slug]/page.tsx b/frontend/app/shows/[slug]/page.tsx index 94c7b3f..9920567 100644 --- a/frontend/app/shows/[slug]/page.tsx +++ b/frontend/app/shows/[slug]/page.tsx @@ -243,7 +243,13 @@ export default async function ShowDetailPage({ params }: { params: Promise<{ slu ))}
) : ( -

No setlist data available.

+
+ +

No Setlist Documented

+

+ This show's setlist hasn't been added yet. Early Goose shows (2014-2016) often weren't documented. +

+
)}