SPB Git
1.6 KB · 28 lines tsx
1import type { Metadata } from "next";2import Link from "next/link";3import { listCollections } from "@/lib/public/queries";4import { Breadcrumbs } from "@/components/breadcrumbs";5import { fmtDate } from "@/lib/utils";6export const revalidate = 600;7export const metadata: Metadata = { title: "Collections", description: "Curated stacks and guides: Apple Silicon AI, high-frequency finance research, academic writing, self-hosted agent infrastructure, real-estate valuation and more.", alternates: { canonical: "/collections" } };8export default async function Collections() {9  const cols = await listCollections();10  return (11    <div className="mx-auto max-w-7xl px-4 py-8 sm:px-6">12      <Breadcrumbs items={[{ label: "Collections" }]} />13      <h1 className="display h1 mt-3">Collections</h1>14      <p className="mt-2 max-w-2xl text-fg-2">Editorial guides that assemble tools into working stacks. Each collection explains why a tool is included and how the pieces fit together.</p>15      <div className="mt-8 grid gap-4 md:grid-cols-2 lg:grid-cols-3">16        {cols.map((c) => (17          <Link key={c.slug} href={`/collections/${c.slug}`} className="card flex flex-col p-5">18            <h2 className="display text-2xl">{c.title}</h2>19            <p className="mt-2 line-clamp-3 text-sm text-fg-2">{c.description}</p>20            <p className="mt-auto pt-4 text-xs text-fg-3">{c.count} tools · updated {fmtDate(c.updatedAt)}</p>21          </Link>22        ))}23        {cols.length === 0 && <p className="card p-8 text-fg-2">Collections are being prepared.</p>}24      </div>25    </div>26  );27}28
Files · laptop-initial-20261102
Menu

Theme