--- import { type CollectionEntry, getCollection } from "astro:content"; import type { GetStaticPaths, Page } from "astro"; import { Icon } from "astro-icon/components"; import Pagination from "@/components/Paginator.astro"; import Project from "@/components/project/Project.astro"; import PageLayout from "@/layouts/Base.astro"; import { projectDateSort } from "@/utils/date"; import { breadcrumbList, collectionPageSchema } from "@/utils/seo"; export const getStaticPaths = (async ({ paginate }) => { const MAX_PROJECTS_PER_PAGE = 10; const allProjects = await getCollection("projects"); return paginate(allProjects.sort(projectDateSort), { pageSize: MAX_PROJECTS_PER_PAGE }); }) satisfies GetStaticPaths; interface Props { page: Page>; } const { page } = Astro.props; const meta = { description: "Things I've built", schema: [ breadcrumbList([ { name: "Home", path: "/" }, { name: "Projects", path: "/projects/" }, ]), collectionPageSchema({ name: "Projects", description: "Things I've built", path: page.url.current, items: page.data.map((p) => ({ name: p.data.title, path: `/projects/${p.id}/` })), }), ], title: "Projects", }; const paginationProps = { ...(page.url.prev && { prevUrl: { text: "← Previous Page", url: page.url.prev, }, }), ...(page.url.next && { nextUrl: { text: "Next Page →", url: page.url.next, }, }), }; ---

Projects RSS feed

    { page.data.map((project) => (
  • )) }