← All recipes

Content Site

Customize your project context

Your project

Prefer terminal? npx github:Pranavoro/tailormd init content-site

Live preview — CLAUDE.md

# My Blog

TailorMD recipe: **Content Site**

## Stack

- **Framework:** Next.js
- **Content format:** MDX
- **CMS:** None
- **SEO focus:** Developer tutorials and product updates

## Folder map

```
content/           # MDX/Markdown posts and pages
  posts/
  pages/
public/            # static assets, og images
src/ or app/       # framework-specific routes and components
  components/
    content/       # post cards, prose, TOC
  lib/
    content/       # parsing, frontmatter, CMS client
```

## Non-negotiables

- Every published page needs a unique title, description, and canonical URL
- Images require alt text; hero images need explicit dimensions
- No broken internal links — validate before ship
- Content frontmatter is the source of truth for metadata
- Keep bundle size lean — lazy-load heavy components
- If using None: cache fetches, handle CMS downtime gracefully

## Naming and style

- Content files: `kebab-case.mdx` or `kebab-case.md`
- Components: `PascalCase`
- Frontmatter keys: `snake_case` or `camelCase` — pick one, stay consistent
- Slugs match filenames; no date prefixes unless the site already uses them

## Commands

```bash
# Adjust for Next.js
npm run dev          # local preview
npm run build        # production build
npm run lint         # eslint / markdown lint
npm run test         # if configured
```

## Ship checklist

Before merging or deploying:

- [ ] Build succeeds with no errors
- [ ] New/changed pages have title + meta description
- [ ] OG images set for shareable pages
- [ ] Internal links resolve
- [ ] Lighthouse SEO score ≥ 90 on key pages
- [ ] Content renders correctly on mobile
- [ ] Sitemap and robots.txt up to date
- [ ] CMS preview matches production (if None ≠ None)

## SEO (Developer tutorials and product updates)

- One H1 per page; logical heading hierarchy
- Meta descriptions: 120–160 characters, include primary keyword naturally
- Structured data (JSON-LD) on articles and key landing pages
- Core Web Vitals: prioritize LCP and CLS on content-heavy pages

## Content pipeline (MDX)

- **MDX/Markdown:** colocate assets in `public/` or alongside content
- **CMS:** webhook or ISR revalidation on publish; never hardcode CMS tokens