My personal homepage and blog — a deliberately minimal, content-first site.
Live: seancoughlin.me
- Next.js 16 (App Router) + React 19
- TypeScript, Tailwind CSS v4
- Markdown blog via
gray-matter+react-markdown - Tested with Vitest, deployed on Vercel
pnpm install
pnpm dev # http://localhost:3000Package manager is pnpm (Node 24 — see .nvmrc).
| Command | What it does |
|---|---|
pnpm dev |
Start the dev server |
pnpm build |
Production build |
pnpm test |
Run the Vitest suite |
pnpm lint |
ESLint |
pnpm pretty-write |
Format with Prettier |
app/ # routes (App Router)
page.tsx # homepage
blog/ # blog index + [slug] post renderer
lib/posts.ts # reads Markdown from content/posts/
content/posts/ # drop a .md file here to publish a post
Create content/posts/<slug>.md with frontmatter:
---
title: "Post title"
date: "YYYY-MM-DD"
description: "One sentence."
---
Body in Markdown.It appears on /blog automatically.
CLAUDE.md— architecture, conventions, and tooling notesCHANGELOG.md— notable changes over time