A static-first developer blog built with Next.js App Router, Tailwind CSS, MDX, Shiki, and local content files.
- Next.js App Router
- Tailwind CSS with Tailwind Typography
- MDX content from
content/**/*.mdandcontent/**/*.mdx - Shiki syntax highlighting through
rehype-pretty-code - Local search over title, tags, description, and raw post text
- RSS, sitemap, robots, and dynamic metadata
npm install
npm run devOpen http://localhost:3000.
app/ App Router pages, metadata, RSS, sitemap
components/ Shared UI components
content/ Local markdown and MDX posts
lib/ Post loading, search, metadata, helpers
public/ Static assets
styles/ Reserved for extra global style modules
utils/ Reserved for general utilitiesCreate .md or .mdx files anywhere inside content/.
---
title: "Binary Search Invariants"
date: "2026-01-12"
tags: ["algorithms", "binary-search"]
description: "A compact note on writing binary search without guessing."
cover: "/og.png"
featured: true
---
Your post content.Supported frontmatter:
titledatetagsdescriptioncoverfeatureddraftslug
slug is optional. Without it, the filename becomes the post slug.
Update lib/site.ts with your production URL before deploying:
url: "https://your-domain.com"The app includes:
- Dynamic post metadata
- OpenGraph and Twitter metadata
/sitemap.xml/robots.txt/rss.xml
Deploy on Vercel:
- Push this folder to GitHub.
- Import the repository in Vercel.
- Keep the default Next.js settings.
- Set a custom domain later in Vercel project settings.
No database is required.
These are intentionally left out of v1 to preserve the static-first architecture:
- Comments: use Giscus or a custom API route later.
- View counter: use Vercel KV, Upstash Redis, or tiny analytics endpoint.
- Newsletter: use Buttondown, Resend, or ConvertKit.
- Analytics: use Vercel Analytics, Plausible, or Umami.
- Project showcase and resume pages: add static routes under
app/projectsandapp/resume.