The AtmosphereConf talks your skyline missed
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: wire ScoredTalksGrid into /talks page

Server component loads talks and passes to client component.
Scoring + glow + hover detail are progressive enhancement —
unauthenticated users see the same grid as before.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>

+2 -26
+2 -26
src/app/talks/page.tsx
··· 1 1 import * as fs from "fs"; 2 2 import * as path from "path"; 3 - import Link from "next/link"; 4 3 import { Nav } from "@/components/ui/nav"; 5 - import { Chip } from "@/components/ui/chip"; 6 - import { LumeCard } from "@/components/ui/lume-card"; 7 - import { formatDuration } from "@/lib/format"; 4 + import { ScoredTalksGrid } from "@/components/scored-talks-grid"; 8 5 import { getAuthUser } from "@/lib/auth/user"; 9 6 import type { TalkEntry } from "@/lib/types"; 10 7 ··· 43 40 </p> 44 41 </header> 45 42 46 - <div className="grid gap-6 sm:grid-cols-2 lg:grid-cols-3"> 47 - {talks.map((talk) => ( 48 - <Link key={talk.rkey} href={`/talk/${talk.rkey}`}> 49 - <LumeCard className="h-full"> 50 - <div className="p-5"> 51 - {talk.speakers.length > 0 && ( 52 - <p className="text-label-md text-primary-fixed-dim mb-2"> 53 - {talk.speakers.map((s) => s.name).join(", ")} 54 - </p> 55 - )} 56 - <h2 className="text-headline-sm text-on-surface mb-3"> 57 - {talk.title} 58 - </h2> 59 - <div className="flex flex-wrap gap-2"> 60 - {talk.room && <Chip>{talk.room}</Chip>} 61 - <Chip>{formatDuration(talk.durationMs)}</Chip> 62 - </div> 63 - </div> 64 - </LumeCard> 65 - </Link> 66 - ))} 67 - </div> 43 + <ScoredTalksGrid talks={talks} /> 68 44 </main> 69 45 </> 70 46 );