A modern, minimalist personal blog built with Next.js 16 and UnoCSS.
- β¨ Clean, minimalist design
- π MDX support with syntax highlighting (Shiki)
- π¨ Atomic CSS with UnoCSS
- π Next.js 16 App Router
- π± Fully responsive
- π¬ Real-time online presence (Liveblocks)
- πΌοΈ Photo album with lightbox
- οΏ½ RSS feed (Atom)
- πΊοΈ Auto-generated sitemap
- Framework: Next.js 16
- Styling: UnoCSS
- Content: MDX with next-mdx-remote + gray-matter
- Syntax Highlighting: Shiki
- Icons: Lucide via @unocss/preset-icons
- Real-time: Liveblocks
- Language: TypeScript
- Node.js 18+
- pnpm 9+
pnpm installCopy .env.example to .env.local and configure:
NEXT_PUBLIC_LIVEBLOCKS_PUBLIC_KEY=your_liveblocks_public_keypnpm devOpen http://localhost:3000 to view the blog.
pnpm build
pnpm startcube-blog/
βββ src/
β βββ app/ # Next.js App Router
β β βββ layout.tsx # Root layout
β β βββ page.tsx # Home page
β β βββ posts/ # Blog posts
β β βββ stack/ # Tech stack page
β β βββ album/ # Photo album
β β βββ atom.xml/ # RSS feed
β β βββ sitemap.ts # Sitemap generator
β βββ components/ # React components
β βββ data/ # Static data
β βββ lib/ # Utilities
β βββ types/ # TypeScript types
βββ content/
β βββ posts/ # Markdown/MDX posts
βββ blog.config.ts # Site configuration
βββ uno.config.ts # UnoCSS configuration
βββ next.config.js # Next.js configuration
Edit blog.config.ts to customize site info:
export const siteConfig = {
name: "Your Blog Name",
title: "Your Blog Title",
description: "Your blog description",
url: "https://your-domain.com",
author: {
name: "Your Name",
email: "you@example.com",
},
// ...
}Create a new .mdx file in content/posts/:
---
title: "Your Post Title"
date: "2024-11-30"
excerpt: "A brief description"
tags: ["tag1", "tag2"]
---
Your content here with **MDX** support...- Push to GitHub
- Import on Vercel
- Add environment variables
- Deploy
Compatible with Netlify, Cloudflare Pages, AWS Amplify, or self-hosted.
Thank you design by suss.me.