Customize your project context
npx github:Pranavoro/tailormd init content-site# 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