diff --git a/frontend/app/leaderboards/page.tsx b/frontend/app/leaderboards/page.tsx
index 36c9dda..571074c 100644
--- a/frontend/app/leaderboards/page.tsx
+++ b/frontend/app/leaderboards/page.tsx
@@ -8,6 +8,7 @@ import Link from "next/link"
import { Star, MapPin, Music, User, Trophy, Calendar, Sparkles } from "lucide-react"
import { Badge } from "@/components/ui/badge"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+import { motion, AnimatePresence } from "framer-motion"
interface TopShow {
show: { id: number; date: string; venue_id: number }
@@ -87,14 +88,19 @@ export default function LeaderboardsPage() {
return (
-
+
Leaderboards
Discover the highest rated shows, legendary jams, and top contributors.
-
+
@@ -106,61 +112,81 @@ export default function LeaderboardsPage() {
{/* HEADY JAMS CONTENT */}
-
-
- {topPerformances.map((item, i) => (
-
-
-
-
-
-
-
- {item.song.title}
-
- {item.performance.notes && (
-
- {item.performance.notes}
-
- )}
+
+
+
+ {topPerformances.map((item, i) => (
+
+
+
-
-
-
- {new Date(item.show.date).toLocaleDateString(undefined, {
- weekday: 'short', year: 'numeric', month: 'short', day: 'numeric'
- })}
-
-
•
-
{item.venue.name}
+
+
+
+ {item.song.title}
+
+ {item.performance.notes && (
+
+ {item.performance.notes}
+
+ )}
+
+
+
+
+ {new Date(item.show.date).toLocaleDateString(undefined, {
+ weekday: 'short', year: 'numeric', month: 'short', day: 'numeric'
+ })}
+
+ •
+ {item.venue.name}
+
-
-
-
-
-
{item.avg_score.toFixed(2)}
+
+
+
+ {item.avg_score.toFixed(2)}
+
+
{item.rating_count} votes
-
{item.rating_count} votes
+
+ ))}
+ {topPerformances.length === 0 && (
+
+ No ranked jams yet. Start rating performances!
-
- ))}
- {topPerformances.length === 0 && (
-
- No ranked jams yet. Start rating performances!
-
- )}
-
-
+ )}
+
+
+
{/* TOP SHOWS CONTENT */}
-
+
{topShows.map((item, i) => (
-
+
{i + 1}
@@ -181,16 +207,27 @@ export default function LeaderboardsPage() {
{item.review_count} ratings
-
+
))}
-
+
{/* VENUES CONTENT */}
-
+
{topVenues.map((item, i) => (
-
+
{item.avg_score.toFixed(2)}
-
+
))}
-
+
{/* USERS CONTENT */}
-
+
{topUsers.map((item, i) => (
-
-
-
- U
-
- User {item.profile.user_id}
- Top Contributor
-
- {item.review_count} Reviews
-
-
+
+
+
+
+ U
+
+ User {item.profile.user_id}
+ Top Contributor
+
+ {item.review_count} Reviews
+
+
+
))}
{topUsers.length === 0 && No active users yet.
}
-
+
diff --git a/frontend/app/profile/page.tsx b/frontend/app/profile/page.tsx
index ab17c50..c03069b 100644
--- a/frontend/app/profile/page.tsx
+++ b/frontend/app/profile/page.tsx
@@ -12,6 +12,7 @@ import { UserAttendanceList } from "@/components/profile/user-attendance-list"
import { UserReviewsList } from "@/components/profile/user-reviews-list"
import { UserGroupsList } from "@/components/profile/user-groups-list"
import { Avatar, AvatarFallback, AvatarImage } from "@/components/ui/avatar"
+import { motion } from "framer-motion"
// Types
interface UserProfile {
@@ -105,7 +106,12 @@ export default function ProfilePage() {
return (
{/* Header Section */}
-
+
-
+
@@ -170,34 +176,56 @@ export default function ProfilePage() {
-
-
-
-
- Achievements
-
-
-
-
- {displayBadges.length === 0 && (
- No badges earned yet. Keep active!
- )}
-
-
-
- {/* Recent Activity or generic stats summary could go here later */}
+
+
+
+
+
+ Achievements
+
+
+
+
+ {displayBadges.length === 0 && (
+ No badges earned yet. Keep active!
+ )}
+
+
+
-
+
+
+
-
+
+
+
-
+
+
+