import Link from "next/link"; import { Navbar } from "@/components/Navbar"; import { Footer } from "@/sections/Footer"; import { BlogCard } from "@/components/BlogCard"; import { prisma } from "@/lib/prisma"; import { toBlogSummary } from "@/lib/blogs"; export const metadata = { title: "Blog | Paul W. Portfolio", description: "Notes on infrastructure, tooling, and shipping software.", }; export const dynamic = "force-dynamic"; export default async function BlogsPage() { const posts = await prisma.blogPost.findMany({ where: { isPublished: true }, orderBy: [{ publishedAt: "desc" }, { createdAt: "desc" }], }); const blogs = posts.map(toBlogSummary); return ( <>

writing

Technical writing on infrastructure, software, and product work.

Notes, updates, and technical writing across current projects and systems.

{blogs.length === 0 ? (
No published posts yet.
) : (
{blogs.map((blog) => ( ))}
)}
Back home