A Next.js 14 static site for resources.councilfire.org — Council Fire's sustainability knowledge hub.
- Next.js 14 with App Router and TypeScript
- Tailwind CSS with custom earth-tone/forest/brand color palette
- MDX content parsed via
gray-matter+next-mdx-remote - Static Site Generation — all pages pre-rendered at build time
- Dark/light mode with system preference detection
- Fuse.js client-side fuzzy search across all content
| Section | Route | Content Dir | Description |
|---|---|---|---|
| Glossary | /glossary/[slug] |
content/glossary/ |
Sustainability terms & definitions |
| Comparisons | /compare/[slug] |
content/compare/ |
Side-by-side framework comparisons |
| Locations | /locations/[slug] |
content/locations/ |
Regional climate risk & regulations |
| Personas | /for/[slug] |
content/for/ |
Role-based resource guides |
| Guides | /guides/[slug] |
content/guides/ |
Framework & compliance guides |
| Industries | /industries/[slug] |
content/industries/ |
Sector-specific sustainability |
npm install
npm run dev # http://localhost:3000
npm run build # Production build + sitemap generation
npm start # Serve production buildCreate an .mdx file in the appropriate content/ subdirectory:
---
title: "Your Term Here"
description: "A one-sentence description for SEO meta tags."
category: "Reporting & Disclosure"
definition: "A 1-2 sentence definition shown in the highlighted box."
relatedTerms:
- "Related Term 1"
- "Related Term 2"
faqs:
- question: "What is this?"
answer: "This is the answer."
lastUpdated: "2025-01-15"
---
## Why It Matters
Your content here...
## How It Works
More content...
## Council Fire's Perspective
Brief section linking to CF services...| Field | Required | Description |
|---|---|---|
title |
✅ | Page title / term name |
description |
✅ | SEO meta description |
category |
❌ | Category for filtering |
definition |
❌ | Quick definition (glossary) |
relatedTerms |
❌ | Related glossary slugs |
relatedPages |
❌ | Related pages in same section |
faqs |
❌ | Array of {question, answer} |
lastUpdated |
❌ | ISO date string |
- JSON-LD structured data on every page (Organization, BreadcrumbList, DefinedTerm, FAQPage, Article)
- Open Graph + Twitter Card meta tags
- Canonical URLs on all pages
- Auto-generated sitemap.xml via
next-sitemap - robots.txt allowing all crawlers
- Semantic HTML with proper heading hierarchy
npx verceldocker build -t cf-resources .
docker run -p 3000:3000 cf-resourcesChange next.config.js output to 'export' for fully static hosting (Netlify, S3, etc.).
- Brand — Olive/sage greens (
brand-50throughbrand-950) - Earth — Warm browns and tans (
earth-50throughearth-950) - Forest — Deep greens for accents and CTAs (
forest-50throughforest-950)
Proprietary — Council Fire © 2025