This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Multi-page static website for the Atlanta Professional Fire Foundation (APFF) built with Eleventy and Decap CMS. Non-technical users edit content via /admin/ interface, which stores data as Markdown files in content/. Netlify hosts the site and auto-deploys on Git commits.
Pages: Home (/), Map (/map/), About (/about/), Donate (/donate/), Connect (/connect/)
# Install dependencies
npm install
# Local development server (http://localhost:8080)
npm run dev
# Production build (outputs to _site/)
npm run buildNote: Local CMS editing requires Netlify Identity (production only) or GitHub OAuth setup. For local content changes, edit markdown files in content/ directly.
- Content - Markdown files in
content/with YAML frontmattercontent/home.md- Homepage (useslayouts/home.njk)content/pages/*.md- Standard pages (uselayouts/page.njk)
- Templates - Nunjucks templates in
_includes/layouts/ - Eleventy - Builds static HTML to
_site/ - Netlify - Serves
_site/and rebuilds on every Git push
- Decap CMS loads at
/admin/via CDN (no build step required) - Schema defined in
admin/config.ymlwith two collections:- Homepage - Single file collection for
content/home.md - Pages - File collection for About, Map, Donate, Connect pages
- Homepage - Single file collection for
- Git Gateway (or GitHub backend) commits CMS changes directly to the repo
- Editorial Workflow enabled for draft/review/publish flow
Homepage (content/home.md):
carousel_images[]- Hero carousel slides with image paths and alt textmission{}- Mission section heading and body textcta_buttons{}- Primary and secondary button labels and linksfind_station{}- Station finder card contentseo{}- Meta tags and social sharing config
Standard Pages (content/pages/*.md):
about.md- About page with hero image and markdown bodymap.md- Station finder with optional map embeddonate.md- Donation page with optional external donation URLconnect.md- Contact page with email and markdown body
All pages use frontmatter for structured data and markdown body for main content.
The template uses CSS custom properties matching Figma design tokens:
Colors:
- Red:
#C31C1D(primary brand),#8C1717(dark variant) - Gray scale:
#1F1F1F(900),#404040(700),#999(400),#F8F8FA(100),#FFF(50) - Outline:
#E6E6EB
Spacing: 8px base scale from xs (8px) to xxxl (64px)
Border Radius: xs (6px), sm (12px), md (16px), lg (24px), pill (999px)
Typography: Inter font family, weights: 400 (Regular), 500 (Medium), 700 (Bold), 800 (Extra Bold)
Layout: Max width 1440px, content padding 64px horizontal
- Passthrough copy:
admin/andassets/folders copied as-is to_site/ - Template engine: Nunjucks for
.njkfiles and Markdown template engine - Input: Root directory (
.) - Output:
_site/ - Ignored files:
task.md,figma.md,CLAUDE.md,README.md(documentation files not processed as templates) - Permalink:
content/home.mdhaspermalink: /to render at site root instead of/content/home/
- Backend:
git-gateway(requires Netlify Identity) orgithub(requires OAuth app) - Media folder:
assets/(committed to repo) - Collections: Single-file collection for
content/home.md - Widgets: String, text, image, object, list, boolean
- Responsive carousel with smooth transitions, dot navigation, and 5-second autoplay
- Flexible: works with any number of images (1+)
- One full-width image displayed at a time
- Click dots to navigate manually
- Pauses on hover
- Mobile-first CSS with breakpoints at 640px and 1024px
- Semantic HTML with accessibility considerations
- No external CSS frameworks - custom styles only
- Centered mission section with horizontally-aligned CTA buttons
- Update
admin/config.ymlto add field definition undercollections[0].files[0].fields - Update
content/home.mdfrontmatter with new field and default value - Update
_includes/layouts/home.njkto render the new field
Edit CSS custom properties in :root selector in _includes/layouts/home.njk (lines ~14-31).
Edit backend section in admin/config.yml. Options:
git-gateway- Netlify Identity + Git Gateway (simpler setup)github- GitHub OAuth app (more control)
Run npm run dev and edit content/home.md directly. Changes hot-reload. CMS login (/admin/) won't work locally without backend configuration.
Build settings:
- Build command:
npm run build - Publish directory:
_site - Branch:
main
Post-deploy setup:
- Enable Netlify Identity (Site settings → Identity → Enable Identity)
- Invite users via email
- Enable Git Gateway (Identity → Services → Git Gateway)
- Users access CMS at
https://yoursite.netlify.app/admin/
package.json- npm scripts and Eleventy dependency.eleventy.js- Build configuration and passthrough copiesnetlify.toml- Netlify build command and/adminredirectadmin/index.html- Decap CMS loader (just loads CDN script)admin/config.yml- CMS schema defining all editable fields (2 collections)content/home.md- Homepage content with carousel, mission, CTAscontent/pages/*.md- About, Map, Donate, Connect pages_includes/layouts/home.njk- Homepage template with carousel and special sections_includes/layouts/page.njk- Standard page template for all other pagesassets/- User-uploaded images (managed by CMS)
When modifying the template:
- Maintain the design token system for consistency
- Keep all styles in the template (no external CSS files for simplicity)
- Ensure mobile responsiveness (test at 640px, 1024px, 1440px)
- Match Figma spacing, color, and typography specifications
- Preserve carousel functionality (scroll-snap, dots, click navigation)
- No build-time image optimization - images served as uploaded (consider Netlify Image CDN if needed)
- Inline styles - all CSS in templates for simplicity; extract to separate file if it grows significantly
- No search/filtering - static site with limited content doesn't require search
- Fixed navigation - all pages show same nav links; conditional navigation removed from homepage for consistency