import React from 'react' import CategoryCard from '../../components/forum/CategoryCard' export default function ForumIndex({ categories = [], trendingTopics = [], latestTopics = [] }) { const totalThreads = categories.reduce((sum, cat) => sum + (Number(cat?.thread_count) || 0), 0) const totalPosts = categories.reduce((sum, cat) => sum + (Number(cat?.post_count) || 0), 0) const sortedByActivity = [...categories].sort((a, b) => { const aTime = a?.last_activity_at ? new Date(a.last_activity_at).getTime() : 0 const bTime = b?.last_activity_at ? new Date(b.last_activity_at).getTime() : 0 return bTime - aTime }) const latestActive = sortedByActivity[0] ?? null return (

Community Hub

Skinbase Forum

Ask questions, share progress, and join focused conversations across every part of Skinbase. This page is your launch point to active topics and community knowledge.

{latestActive && (

Latest Activity

{latestActive.name} {formatLastActivity(latestActive.last_activity_at)}
)}

Browse

Forum Sections

Choose a section to view threads or start a discussion.

{/* Category grid */} {categories.length === 0 ? (

No forum categories available yet.

) : (
{categories.map((cat) => ( ))}
)}
) } function Panel({ title, items, emptyLabel }) { return (

{title}

{items.length === 0 ? (

{emptyLabel}

) : (
{items.map((item) => (
{item.title}
{item.board && {item.board}} {item.author && by {item.author}} {typeof item.replies_count === 'number' && {item.replies_count} replies} {item.score !== undefined && score {item.score}} {item.last_post_at && {formatLastActivity(item.last_post_at)}}
))}
)}
) } function StatCard({ label, value }) { return (

{label}

{value}

) } function number(n) { return (n ?? 0).toLocaleString() } function formatLastActivity(value) { if (!value) { return 'No recent activity' } const date = new Date(value) if (Number.isNaN(date.getTime())) { return 'No recent activity' } return `Updated ${date.toLocaleDateString('en-GB', { day: '2-digit', month: 'short', year: 'numeric' })}` }