A modern blog built with Next.js 16, MDX, and Contentlayer. Deployed on Vercel.
- Next.js 16 - React framework with App Router
- TypeScript - Type safety
- Tailwind CSS - Styling
- Contentlayer - MDX processing and type generation
- shadcn/ui - Component library aesthetic
- Vercel - Deployment
- Create a new file in
content/blog/my-post.mdx - Add frontmatter:
---
title: "Your Post Title"
date: "2026-01-15"
description: "A short description for SEO"
author: "Your Name"
tags: ["music", "tech"]
published: true
---
Your content here...- Write your content using markdown
- Commit and push - Vercel auto-deploys!
title(required): Post titledate(required): Publication date (YYYY-MM-DD)description(required): Short description for SEO and previewsimage(optional): Cover image URLauthor(optional): Author nametags(optional): Array of tagspublished(optional): Set tofalseto draft
- Headings, lists, links, images
- Code blocks with syntax highlighting
- Tables, blockquotes, horizontal rules
- Inline code and bold/italic text
- HTML (including iframe for videos)
# Install dependencies
pnpm install
# Run dev server
pnpm dev
# Build for production
pnpm build
# Start production server
pnpm startVisit http://localhost:3000 to see your blog.
recoup-blog/
├── app/
│ ├── blog/[slug]/page.tsx # Individual blog post page
│ ├── page.tsx # Homepage (blog listing)
│ ├── layout.tsx # Root layout
│ └── globals.css # Global styles
├── components/
│ ├── mdx-components.tsx # MDX component overrides
│ └── ui/ # shadcn components (future)
├── content/
│ └── blog/ # Your blog posts (.mdx files)
├── lib/
│ └── utils.ts # Utility functions
├── public/
│ └── blog/ # Blog images
├── contentlayer.config.ts # Contentlayer configuration
└── next.config.mjs # Next.js configuration
- Push this repo to GitHub
- Import to Vercel
- Vercel auto-detects Next.js
- Deploy!
Future pushes to main auto-deploy.
In Vercel dashboard:
- Go to your project settings
- Add custom domain (e.g.,
blog.recoupable.comorresearch.recoupable.com) - Update DNS records as shown
- Social sharing automation
- Newsletter integration
- Comments system
- Search functionality
- RSS feed
- Analytics dashboard
- Draft preview mode
To add a post:
- Create branch:
git checkout -b post/your-post-name - Add your
.mdxfile incontent/blog/ - Test locally:
pnpm dev - Commit:
git commit -m "Add post: Your Title" - Push:
git push origin post/your-post-name - Merge to main when ready
Built with ❤️ by Recoupable