diff --git a/src/app/api/ticker/forum-posts/route.ts b/src/app/api/ticker/forum-posts/route.ts
index 929b0a4..6c50749 100644
--- a/src/app/api/ticker/forum-posts/route.ts
+++ b/src/app/api/ticker/forum-posts/route.ts
@@ -22,65 +22,32 @@ export async function GET() {
auth: { persistSession: false },
});
- // Newest threads + newest replies, interleaved by timestamp.
- const [threadsRes, repliesRes] = await Promise.all([
- sb
- .from('forum_threads')
- .select('id, title, author_name, created_at')
- .order('created_at', { ascending: false })
- .limit(20),
- sb
- .from('forum_replies')
- .select('id, body, thread_id, author_name, created_at, forum_threads(title)')
- .order('created_at', { ascending: false })
- .limit(20),
- ]);
+ // Threads only — per editorial direction we surface unique topics, not
+ // reply chatter, so the ticker shows breadth of discussion.
+ const threadsRes = await sb
+ .from('forum_threads')
+ .select('id, title, author_name, created_at')
+ .order('created_at', { ascending: false })
+ .limit(40);
- if (threadsRes.error && repliesRes.error) {
+ if (threadsRes.error) {
return NextResponse.json(
- { error: threadsRes.error?.message || repliesRes.error?.message, items: [] },
- { status: 500 }
+ { error: threadsRes.error.message, items: [] },
+ { status: 500 },
);
}
- const items: TickerItem[] = [];
-
- for (const t of threadsRes.data || []) {
- items.push({
- id: t.id,
- href: `/forum/thread/${t.id}`,
- title: t.title,
- kind: 'thread',
- author_name: t.author_name,
- created_at: t.created_at,
- });
- }
-
- for (const r of (repliesRes.data || []) as Array<{
- id: string;
- body: string;
- thread_id: string;
- author_name: string | null;
- created_at: string;
- forum_threads?: { title: string } | { title: string }[] | null;
- }>) {
- const parent =
- Array.isArray(r.forum_threads) ? r.forum_threads[0] : r.forum_threads;
- const parentTitle = parent?.title || 'forum reply';
- items.push({
- id: r.id,
- href: `/forum/thread/${r.thread_id}`,
- title: `Re: ${parentTitle}`,
- kind: 'reply',
- author_name: r.author_name,
- created_at: r.created_at,
- });
- }
-
- items.sort((a, b) => (a.created_at < b.created_at ? 1 : -1));
+ const items: TickerItem[] = (threadsRes.data || []).map((t: any) => ({
+ id: t.id,
+ href: `/forum/thread/${t.id}`,
+ title: t.title,
+ kind: 'thread',
+ author_name: t.author_name,
+ created_at: t.created_at,
+ }));
return NextResponse.json(
- { items: items.slice(0, 30) },
+ { items: items.slice(0, 40) },
{
headers: {
'Cache-Control': 'public, s-maxage=300, stale-while-revalidate=600',
diff --git a/src/app/forum/[slug]/page.tsx b/src/app/forum/[slug]/page.tsx
index 732388e..6a81b7c 100644
--- a/src/app/forum/[slug]/page.tsx
+++ b/src/app/forum/[slug]/page.tsx
@@ -361,9 +361,6 @@ export default function ForumCategoryPage() {
)}
- {/* Top Performing Threads Widget (shown when category is loaded) */}
- {!loading && category && }
-
{/* Search + Sort Bar */}
{/* Search */}
diff --git a/src/app/forum/page.tsx b/src/app/forum/page.tsx
index 2ddecf7..a6f8bc6 100644
--- a/src/app/forum/page.tsx
+++ b/src/app/forum/page.tsx
@@ -264,14 +264,41 @@ export default function ForumIndexPage() {
{/* Hero — width-aligned with content below + featured-box pattern */}
-
-
-
-
The Crew Lounge
+
+
+
+
+
+
The Crew Lounge
+
+
+ Connect with broadcast, motion picture, and post production pros worldwide.
+
+
+
+ {currentUserId ? (
+
+
+
+
+ Start a thread
+
+ ) : (
+
+
+
+
+ Sign in to post
+
+ )}
+
-
- The Crew Lounge: connect with broadcast, motion picture and post production professionals worldwide. Ask questions, share expertise, and discuss the technology shaping the industry.
-
@@ -505,12 +532,9 @@ export default function ForumIndexPage() {
)}
- {/* Default view: Top Threads + Category Grid */}
+ {/* Default view: Category Grid */}
{!isSearchMode && (
<>
- {/* Top Performing Threads Widget */}
- {!loading &&
}
-
{loading && (
{[...Array(8)].map((_, i) => (
diff --git a/src/app/manufacturers/DirectoryClient.tsx b/src/app/manufacturers/DirectoryClient.tsx
index 07500d8..d049e60 100644
--- a/src/app/manufacturers/DirectoryClient.tsx
+++ b/src/app/manufacturers/DirectoryClient.tsx
@@ -53,24 +53,24 @@ export default function ManufacturerDirectoryClient({
return (
-
+
setQ(e.target.value)}
placeholder="Search by company or product…"
- className="w-full bg-white border border-ink/15 rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-brand-primary/40"
+ className="w-full bg-[#0d0d0d] border border-[#2a2a2a] rounded-md px-3 py-2 text-sm focus:outline-none focus:ring-2 focus:ring-[#3b82f6]/40"
/>
-
+
{SHOW_FILTERS.map((f) => (
setShowFilter(f)}
className={`px-3 py-1.5 rounded text-xs font-semibold ${
- showFilter === f ? "bg-brand-primary text-white" : "text-ink/70 hover:bg-ink/5"
+ showFilter === f ? "bg-[#3b82f6] text-white" : "text-[#aaa] hover:bg-[#1a1a1a]"
}`}
>
{f}
@@ -87,8 +87,8 @@ export default function ManufacturerDirectoryClient({
onClick={() => setLetter(l)}
className={`min-w-[28px] h-7 px-1.5 rounded font-semibold ${
letter === l
- ? "bg-brand-primary text-white"
- : "bg-white border border-ink/10 text-ink/65 hover:bg-ink/5"
+ ? "bg-[#3b82f6] text-white"
+ : "bg-[#0d0d0d] border border-[#252525] text-[#aaa] hover:bg-[#1a1a1a]"
}`}
>
{l}
@@ -96,7 +96,7 @@ export default function ManufacturerDirectoryClient({
))}
-
+
Showing {filtered.length.toLocaleString()} of {manufacturers.length.toLocaleString()} manufacturers
@@ -105,9 +105,9 @@ export default function ManufacturerDirectoryClient({
-
+
{m.logo_url ? (
/* eslint-disable-next-line @next/next/no-img-element */
) : (
-
+
{(m.company_name || "?").trim().charAt(0).toUpperCase()}
)}
-
+
{m.company_name}
@@ -138,12 +138,12 @@ export default function ManufacturerDirectoryClient({
)}
{m.featured && (
-
+
Featured
)}
-
+
{m.bio || "Profile coming soon."}
@@ -152,7 +152,7 @@ export default function ManufacturerDirectoryClient({
{filtered.length === 0 && (
-
+
No manufacturers match these filters.
)}
diff --git a/src/app/manufacturers/[slug]/page.tsx b/src/app/manufacturers/[slug]/page.tsx
index 45032c0..4d0c542 100644
--- a/src/app/manufacturers/[slug]/page.tsx
+++ b/src/app/manufacturers/[slug]/page.tsx
@@ -128,21 +128,21 @@ export default async function ManufacturerProfile({
};
return (
-
+
-
-
+
+
← Manufacturer Directory
-