Eleventy in a Box is a reusable Eleventy starter for blogs, brochure websites, and small editorial projects. Optional add-on feature packs are available so you can add extra functionality when needed.
/admin/npm installnpm run startThe development server runs at http://localhost:8080.
npm run buildStatic files are written to /dist. The build clears /dist first, so stale output is removed automatically.
The base boilerplate is intentionally minimal. Optional sections (for example, blog, FAQs, portfolio, and team) can be added via feature packs. Reusable interface patterns, including alternate navigation treatments, can also be installed as packs.
features.jsonfeature-packs/[name]feature-packs/[name]/files/feature-packs/[name]/files/src/css/[name].css and are loaded only when enablednpm run add:teamThis command:
"team": true in features.jsonsrc//team/ to both main and footer navigationsrc/admin/config.ymlnpm run add:navigation-menusThis command:
"navigationMenus": true in features.jsonsrc/"overlay-small", "overlay-large", and "slide" in src/_data/navigation_menu.jsonnpm run add:blogThis command:
"blog": true in features.jsonsrc//blog/ to src/_data/navigation.json if missingsrc/admin/config.ymlnpm run add:faqsThis command:
"faqs": true in features.jsonsrc//faqs/ to both main and footer navigationsrc/admin/config.ymlnpm run add:changelogThis command:
"changelog": true in features.jsonsrc//changelog/ to both main and footer navigationsrc/admin/config.ymlnpm run add:portfolioThis command:
"portfolio": true in features.jsonsrc//portfolio/ to both main and footer navigationsrc/admin/config.ymlnpm run add:servicesThis command:
"services": true in features.jsonsrc//services/ to both main and footer navigationsrc/admin/config.ymlnpm run add:testimonialsThis command:
"testimonials": true in features.jsonsrc//testimonials/ to footer navigationsrc/admin/config.ymlYou can preview changes without writing files:
node scripts/add-feature.js team --dry-run
node scripts/add-feature.js blog --dry-run
node scripts/add-feature.js changelog --dry-run
node scripts/add-feature.js faqs --dry-run
node scripts/add-feature.js navigation-menus --dry-run
node scripts/add-feature.js portfolio --dry-run
node scripts/add-feature.js services --dry-run
node scripts/add-feature.js testimonials --dry-runYou can remove a pack the same way:
npm run remove:blog
npm run remove:changelog
npm run remove:faqs
npm run remove:navigation-menus
npm run remove:portfolio
npm run remove:services
npm run remove:testimonials
npm run remove:teamThe removal script:
features.jsonsrc/By default, modified installed files are left in place. Use --force only when you want to remove those as well.
npm run check:boilerplate
npm run check:cssThis checks the feature-pack wiring for:
src/The CSS audit checks for:
transform shorthand usagedata-layout names in templateshead.htmlhead.html that do not point to a real pack stylesheetsrc/index.md: homepagesrc/about.md: about pagesrc/contact.md: contact pagesrc/_data/site-content.json: editable site content for the CMSsrc/_data/site.js: computed site data and environment-aware URL logicsrc/_data/navigation.json: main navigationsrc/_data/footer_navigation.json: footer navigationLayouts use city names in data-layout and can change grid rhythm with data-grid. The default rhythm is 4-5.
<div class="layout" data-layout="berlin">Switch the same city recipe onto another compound grid:
<div class="layout" data-layout="berlin" data-grid="4-6">Available grid rhythms are 4-5, 4-6, and 3-4. The 4-6 rhythm shares the same named lines as 4-5 where possible, while 3-4 has a compact override layer for city recipes that need fewer b lines.
Use these names unless a pack has a specific reason not to:
featureImage: page-level hero or lead imagefeatureImageCaption: optional caption for featureImageimage: main item image when the pack is not already using an established field namethumbnail: list or card image when the pack is not already using an established field nameavatar: person imagelogo: brand or company markclientLogo: client-specific logo inside portfolio or similar work contentKeep new aliases to a minimum. Reuse an existing name when the meaning is already clear.
For index pages and content entries, prefer these fields where they fit:
titlemetaDescledesummaryorderfeaturedslugEditable site-wide content belongs in src/_data/site-content.json. Computed values such as absoluteUrl and assetPath belong in src/_data/site.js.
The CMS is configured for Git Gateway on the main branch. Before launching a real site:
src/_data/site-content.json or use the CMS Globals section for contact details.