import type { Metadata } from "next"; import Link from "next/link"; import { categoryTree } from "@/lib/public/queries"; import { Breadcrumbs } from "@/components/breadcrumbs"; export const revalidate = 600; export const metadata: Metadata = { title: "Categories", description: "Browse every tool category: AI, software development, infrastructure, Apple platforms, data, academic research, finance and productivity.", alternates: { canonical: "/categories" } }; export default async function Categories() { const tree = await categoryTree(); return (

Categories

A two-level taxonomy. Tools may appear in several categories; the primary one defines the breadcrumb on its page. Counts include only published entries.

{tree.map((c) => (

{c.name}

{c.count} tools

{c.description}

    {c.children.map((ch) => (
  • {ch.name}{ch.description}{ch.count}
  • ))}
))}
); }