Data Collections and Processing
**Referenced Files in This Document** - [.eleventy.js](file://.eleventy.js) - [src/_data/site.json](file://src/_data/site.json) - [src/_data/pages.json](file://src/_data/pages.json) - [src/_data/testimonials.json](file://src/_data/testimonials.json) - [src/_data/resources.json](file://src/_data/resources.json) - [src/_data/partners.json](file://src/_data/partners.json) - [src/_data/polling.js](file://src/_data/polling.js) - [src/_data/iaaPartners.json](file://src/_data/iaaPartners.json) - [src/_data/clients.json](file://src/_data/clients.json) - [src/_data/capabilities.json](file://src/_data/capabilities.json) - [src/_data/capabilitiesPage.json](file://src/_data/capabilitiesPage.json) - [src/_data/alliancePage.json](file://src/_data/alliancePage.json) - [src/_data/allianceMembers.json](file://src/_data/allianceMembers.json) - [src/content/news/news.11tydata.json](file://src/content/news/news.11tydata.json) - [src/content/cases/cases.11tydata.json](file://src/content/cases/cases.11tydata.json) - [src/content/team/team.11tydata.json](file://src/content/team/team.11tydata.json) - [src/content/services/services.11tydata.json](file://src/content/services/services.11tydata.json) - [src/content/newsletters/newsletters.11tydata.json](file://src/content/newsletters/newsletters.11tydata.json) - [src/content/news/2025-10-17-political-powerhouse.md](file://src/content/news/2025-10-17-political-powerhouse.md) - [src/content/cases/adelaide-city-fc.md](file://src/content/cases/adelaide-city-fc.md) - [src/content/team/01-matt-neagle.md](file://src/content/team/01-matt-neagle.md) - [src/index.njk](file://src/index.njk) - [src/alliance.njk](file://src/alliance.njk) - [src/_includes/macros/client-marquee.njk](file://src/_includes/macros/client-marquee.njk) - [src/assets/js/modules/carousel-system.js](file://src/assets/js/modules/carousel-system.js)Update Summary
Changes Made
- Updated IAA partners data with significantly reorganized list containing 31 new entries replacing 52 existing ones
- Enhanced client showcase with new logos and company information including Diarkis as trusted client
- Updated capabilities page data with new carousel ordering consistent with footer menu structure
- Added new data sources for IAA partners, client showcase, and enhanced capabilities content
Table of Contents
- Introduction
- Project Structure
- Core Components
- Architecture Overview
- Detailed Component Analysis
- Dependency Analysis
- Performance Considerations
- Troubleshooting Guide
- Conclusion
- Appendices
Introduction
This document explains how Eleventy collects and processes content for the site. It covers how Markdown files, JSON data files, and dynamic data sources are combined into named collections, how custom filters and transforms operate, and how frontmatter and global data influence rendering. Practical guidance is included for creating new collections, adding custom filters, and working with complex data structures. Validation, error handling, and performance tips for large datasets are also addressed.
Updated Recent changes include significant reorganization of IAA partners list with 31 new entries, enhanced client showcase with Diarkis inclusion, and updated capabilities page carousel ordering.
Project Structure
Eleventy organizes content under src/, with:
- Global data under src/_data/ (JSON and JS modules)
- Content under src/content/
/ (Markdown with frontmatter) - Per-section Eleventy data files under src/content/
/ .11tydata.* (control permalinks and tags) - Templates and layouts under src/ (Nunjucks and Markdown)
- Eleventy configuration under .eleventy.js
Key configuration highlights:
- Input/output directories, template engines, and passthrough copy are defined in the Eleventy config.
- Watch targets include the global data folder so changes trigger rebuilds.
- Passthrough copy handles static assets and admin UI.
graph TB
C[".eleventy.js<br/>Configuration and Collections"] --> D["src/_data/<br/>Global data files"]
C --> G["src/content/<section>/<item>.md<br/>Markdown with frontmatter"]
G --> P["Permalink control via <section>.11tydata.*"]
D --> T["Templates (.njk, .md)<br/>Rendered output"]
G --> T
P --> T
Diagram sources
- [.eleventy.js:267-283](file://.eleventy.js#L267-L283)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
Section sources
- [.eleventy.js:267-283](file://.eleventy.js#L267-L283)
- [.eleventy.js:19-22](file://.eleventy.js#L19-L22)
- [.eleventy.js:7-14](file://.eleventy.js#L7-L14)
Core Components
- Collections: Custom named groups of content derived from Markdown globs, filtered, and sorted.
- Filters: Template helpers for transforming arrays and values (limit, skip, sortBy, where, unique, dateFormat, truncate, nl2br, slug, split, readingTime, firstParagraph, dump, log).
- Transforms: Post-processing steps applied to generated HTML (Obsidian wiki-link and callout conversion, optional HTML minification in production).
- Global data: JSON and JS modules merged into the global data cascade, influencing templates and computed values.
- Permalink control: Section-level 11tydata files disable permalinks for content sections to prevent individual pages from being generated.
Updated Enhanced with new IAA partners data, client showcase data, and capabilities page data sources.
Section sources
- [.eleventy.js:166-210](file://.eleventy.js#L166-L210)
- [.eleventy.js:42-165](file://.eleventy.js#L42-L165)
- [.eleventy.js:212-261](file://.eleventy.js#L212-L261)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
- [src/content/cases/cases.11tydata.json:1-2](file://src/content/cases/cases.11tydata.json#L1-L2)
- [src/content/team/team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
- [src/content/services/services.11tydata.json:1-2](file://src/content/services/services.11tydata.json#L1-L2)
- [src/content/newsletters/newsletters.11tydata.json:1-2](file://src/content/newsletters/newsletters.11tydata.json#L1-L2)
Architecture Overview
The data pipeline integrates content, global data, and Eleventy's collection/filter/transform systems to produce rendered pages.
sequenceDiagram
participant FS as "Filesystem"
participant Eleventy as ".eleventy.js"
participant Coll as "Collections"
participant Glob as "getFilteredByGlob()"
participant Sort as "Sort/Filter"
participant Data as "Global Data (_data/*)"
participant Tpl as "Templates (.njk/.md)"
FS->>Eleventy : Load config and watch targets
Eleventy->>Coll : Define addCollection(...)
Eleventy->>Data : Merge JSON/JS modules into global data
Coll->>Glob : Match Markdown globs per section
Glob-->>Coll : Array of items with frontmatter
Coll->>Sort : Apply filters/sorting
Sort-->>Tpl : Collection items passed to templates
Data-->>Tpl : Global data available in templates
Tpl-->>FS : Rendered HTML (with transforms)
Diagram sources
- [.eleventy.js:166-210](file://.eleventy.js#L166-L210)
- [.eleventy.js:42-165](file://.eleventy.js#L42-L165)
- [.eleventy.js:212-261](file://.eleventy.js#L212-L261)
Detailed Component Analysis
Collections: Organization and Behavior
Eleventy defines named collections that group related content and apply consistent transformations. Each collection:
- Selects Markdown files via glob patterns
- Optionally filters by frontmatter flags
- Sorts by date or order metadata
- Exposes items to templates for rendering
Key collections:
- news: Latest-first chronological sort by date
- cases: Unsorted list of case studies
- newsletters: Latest-first chronological sort by date
- teamMembers: Ordered by an order field
- featuredNews: Subset of news marked as featured
- services: Ordered by an order field
- knowledge: Latest-first chronological sort by date
flowchart TD
Start(["Collection Definition"]) --> Select["Select Markdown via glob"]
Select --> FilterFlag{"Filter by frontmatter flag?"}
FilterFlag --> |Yes| ApplyWhere["Apply filter (e.g., featured)"]
FilterFlag --> |No| SkipWhere["Skip filter"]
ApplyWhere --> SortKey["Sort by date or order"]
SkipWhere --> SortKey
SortKey --> Return["Return collection items"]
Diagram sources
- [.eleventy.js:170-210](file://.eleventy.js#L170-L210)
Section sources
- [.eleventy.js:170-210](file://.eleventy.js#L170-L210)
Frontmatter and Permalink Control
Content items carry metadata in frontmatter (for example, date, author, excerpt, image, pdf_url, featured, order). Section-level 11tydata files control whether individual content pages are generated:
- Disabling permalinks ensures section pages (like news, cases, team, services, newsletters) render lists or curated pages without generating individual content pages for each Markdown file.
Examples of frontmatter fields observed in content:
- News article frontmatter includes title, date, author, excerpt, image, pdf_url, and featured.
- Case study frontmatter includes client, category, title, image, quote, quote_author, order, and featured.
- Team member frontmatter includes anchor, name, role, order, images, bio_short, and featured.
Section sources
- [src/content/news/2025-10-17-political-powerhouse.md:1-18](file://src/content/news/2025-10-17-political-powerhouse.md#L1-L18)
- [src/content/cases/adelaide-city-fc.md:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14)
- [src/content/team/01-matt-neagle.md:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
- [src/content/cases/cases.11tydata.json:1-2](file://src/content/cases/cases.11tydata.json#L1-L2)
- [src/content/team/team.11tydata.json:1-2](file://src/content/team/team.11tydata.json#L1-L2)
- [src/content/services/services.11tydata.json:1-2](file://src/content/services/services.11tydata.json#L1-L2)
- [src/content/newsletters/newsletters.11tydata.json:1-2](file://src/content/newsletters/newsletters.11tydata.json#L1-L2)
Global Data: Site Metadata and Page Content
Global data files contribute reusable content and configuration:
- site.json: Brand and contact metadata used across templates.
- pages.json: Hero, CTA, and feature content for key pages (team, cases, news, contact, newsletters).
- testimonials.json: Structured testimonials for testimonials components.
- resources.json: Curated resource cards with metadata and links.
- partners.json: Partner logos and alt text.
- polling.js: Dynamic polling data returned asynchronously.
- iaaPartners.json: Invest Australia Alliance partner network with 31 new entries replacing 52 existing ones.
- clients.json: Enhanced client showcase with Diarkis and other new logos.
- capabilities.json: Strategic capabilities data for homepage carousel.
- capabilitiesPage.json: Comprehensive capabilities content for dedicated page.
- alliancePage.json: IAA methodology, services, and engagement structure.
- allianceMembers.json: Members portal dashboard and resources.
Updated Added comprehensive IAA partner data, enhanced client showcase, and detailed capabilities content.
These files are merged into the global data cascade and can be accessed in templates and computed properties.
Section sources
- [src/_data/site.json:1-20](file://src/_data/site.json#L1-L20)
- [src/_data/pages.json:1-79](file://src/_data/pages.json#L1-L79)
- [src/_data/testimonials.json:1-24](file://src/_data/testimonials.json#L1-L24)
- [src/_data/resources.json:1-32](file://src/_data/resources.json#L1-L32)
- [src/_data/partners.json:1-14](file://src/_data/partners.json#L1-L14)
- [src/_data/polling.js:1-17](file://src/_data/polling.js#L1-L17)
- [src/_data/iaaPartners.json:1-89](file://src/_data/iaaPartners.json#L1-L89)
- [src/_data/clients.json:1-108](file://src/_data/clients.json#L1-L108)
- [src/_data/capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
- [src/_data/capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)
- [src/_data/alliancePage.json:1-78](file://src/_data/alliancePage.json#L1-L78)
- [src/_data/allianceMembers.json:1-40](file://src/_data/allianceMembers.json#L1-L40)
Filters: Data Transformation in Templates
Eleventy exposes a rich set of filters for transforming arrays and values:
- Array manipulation: limit, skip, sortBy, where, unique
- String and text: slug, truncate, nl2br, split, firstParagraph
- Dates: dateFormat/date (ISO/year/long/short)
- Content metrics: readingTime
- Debugging: dump, log
These filters enable concise, readable transformations directly in templates.
Section sources
- [.eleventy.js:42-165](file://.eleventy.js#L42-L165)
Transforms: Post-Processing HTML
Two transforms are defined:
- obsidianSyntax: Converts Obsidian-style wiki-links and callouts to HTML classes for styling.
- htmlmin: Minifies HTML output in production builds.
Transforms run after templates render and before files are written.
Section sources
- [.eleventy.js:212-261](file://.eleventy.js#L212-L261)
Creating New Collections
To add a new collection:
- Choose a descriptive name and define it with addCollection in the Eleventy config.
- Use getFilteredByGlob to select Markdown files by path pattern.
- Apply filter and sort operations as needed (for example, by date or order).
- Return the resulting array for use in templates.
Example reference paths:
- [Add a new collection:166-210](file://.eleventy.js#L166-L210)
Section sources
- [.eleventy.js:166-210](file://.eleventy.js#L166-L210)
Implementing Custom Filters
To add a custom filter:
- Use addFilter in the Eleventy config.
- Accept the input value(s) and return the transformed result.
- Keep filters pure and fast; avoid heavy I/O.
Example reference paths:
- [Add a filter:42-165](file://.eleventy.js#L42-L165)
Section sources
- [.eleventy.js:42-165](file://.eleventy.js#L42-L165)
Processing Complex Data Structures
Global data often contains nested arrays and objects:
- testimonials.json: Array of testimonial objects with quote, author, and role.
- resources.json: Array of resource objects with icon, meta, title, desc, file_url, file_type, file_label.
- partners.json: Array of partner objects with file and alt.
- polling.js: Asynchronous module returning structured polling metrics.
- iaaPartners.json: Array of IAA partner organizations with category, description, and logo status.
- clients.json: Enhanced client showcase with Diarkis and other new logos.
- capabilities.json: Strategic capabilities data for homepage carousel with card classes.
- capabilitiesPage.json: Comprehensive capabilities content for dedicated page.
Updated Added new data structures for IAA partners, enhanced client showcase, and comprehensive capabilities content.
Access these in templates and leverage filters to slice, sort, and present data efficiently.
Section sources
- [src/_data/testimonials.json:1-24](file://src/_data/testimonials.json#L1-L24)
- [src/_data/resources.json:1-32](file://src/_data/resources.json#L1-L32)
- [src/_data/partners.json:1-14](file://src/_data/partners.json#L1-L14)
- [src/_data/polling.js:1-17](file://src/_data/polling.js#L1-L17)
- [src/_data/iaaPartners.json:1-89](file://src/_data/iaaPartners.json#L1-L89)
- [src/_data/clients.json:1-108](file://src/_data/clients.json#L1-L108)
- [src/_data/capabilities.json:1-53](file://src/_data/capabilities.json#L1-L53)
- [src/_data/capabilitiesPage.json:1-98](file://src/_data/capabilitiesPage.json#L1-L98)
IAA Partners and Client Showcase Integration
The IAA partners and client showcase data are integrated throughout the site:
- IAA Partners: The reorganized list now contains 31 new entries replacing 52 existing ones, with categories including Lead Agency, Market Research, International Intelligence, Financial Compliance, Legal & Commercial, Business Advisory, Planning & Approvals, Workforce Solutions, Tendering & Bids, Social License, Design & Digital, and Video Production.
- Client Showcase: Enhanced with Diarkis as a trusted client, along with other new logos including Viva Energy, Techforce Personnel, and others.
- Carousel Ordering: Capabilities carousel ordering is now consistent with footer menu structure for better user experience.
Updated Significant reorganization of IAA partners list and enhancement of client showcase.
Section sources
- [src/_data/iaaPartners.json:1-89](file://src/_data/iaaPartners.json#L1-L89)
- [src/_data/clients.json:1-108](file://src/_data/clients.json#L1-L108)
- [src/index.njk:49-82](file://src/index.njk#L49-L82)
- [src/alliance.njk:93-108](file://src/alliance.njk#L93-L108)
- [src/_includes/macros/client-marquee.njk:1-27](file://src/_includes/macros/client-marquee.njk#L1-L27)
- [src/assets/js/modules/carousel-system.js:1-36](file://src/assets/js/modules/carousel-system.js#L1-L36)
Dependency Analysis
Collections depend on:
- Markdown content with frontmatter
- Section-level 11tydata controls for permalink behavior
- Global data for page-specific content and site-wide metadata
Filters and transforms depend on:
- Template rendering and the availability of data in the data cascade
graph LR
MD["Markdown content<br/>with frontmatter"] --> Coll["Collections"]
One11["<section>.11tydata.*<br/>permalinks/tags"] --> Coll
GD["Global data (_data/*)"] --> Tpl["Templates"]
Coll --> Tpl
Tpl --> Out["Rendered HTML"]
Trans["Transforms"] --> Out
Diagram sources
- [.eleventy.js:166-210](file://.eleventy.js#L166-L210)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
- [src/_data/site.json:1-20](file://src/_data/site.json#L1-L20)
Section sources
- [.eleventy.js:166-210](file://.eleventy.js#L166-L210)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
Performance Considerations
- Prefer filtering and sorting in collections rather than in templates to reduce repeated work.
- Use sortBy and where filters judiciously; cache expensive computations in global data modules when appropriate.
- Keep frontmatter minimal and consistent to simplify parsing.
- Use transforms sparingly; htmlmin runs in production only.
- Monitor build times and consider splitting large datasets into smaller collections or paginating.
- Updated Consider the impact of larger IAA partners dataset (31 new entries) on carousel performance and optimize image loading for enhanced client showcase.
Troubleshooting Guide
Common issues and remedies:
-
Unexpected empty collections
- Verify glob patterns and Markdown locations.
- Confirm section-level 11tydata files do not unintentionally disable permalinks.
- Check frontmatter keys used for filtering (for example, featured) are present and typed correctly.
- Reference: [Collection definitions:170-210](file://.eleventy.js#L170-L210), [Permalink control:1-2](file://src/content/news/news.11tydata.json#L1-L2)
-
Incorrect ordering or sorting
- Ensure order fields exist and are numeric; otherwise comparisons may fail.
- For date-based sorting, confirm date values parse as valid dates.
- Reference: [Sorting logic:170-210](file://.eleventy.js#L170-L210)
-
Missing global data in templates
- Confirm JSON/JS modules export the expected shape.
- Check for typos in keys and ensure modules are placed under src/_data/.
- Reference: [Global data files:1-20](file://src/_data/site.json#L1-L20)
-
Transform not applied
- Verify transform names and conditions (for example, HTML output only).
- Reference: [Transforms:212-261](file://.eleventy.js#L212-L261)
-
Updated IAA partners or client showcase issues
- Verify new IAA partners data structure matches expected format with name, category, desc, logo, and logo_pending fields.
- Check client showcase logo paths and alt text for Diarkis and other new clients.
- Ensure carousel ordering matches footer menu structure for consistent user experience.
Section sources
- [.eleventy.js:170-210](file://.eleventy.js#L170-L210)
- [src/content/news/news.11tydata.json:1-2](file://src/content/news/news.11tydata.json#L1-L2)
- [.eleventy.js:212-261](file://.eleventy.js#L212-L261)
- [src/_data/site.json:1-20](file://src/_data/site.json#L1-L20)
- [src/_data/iaaPartners.json:1-89](file://src/_data/iaaPartners.json#L1-L89)
- [src/_data/clients.json:1-108](file://src/_data/clients.json#L1-L108)
Conclusion
Eleventy's data collection and processing system centers on clear collections, robust filters, and a global data cascade. By organizing content with consistent frontmatter, controlling permalink generation per section, and leveraging filters and transforms, the site renders efficient, maintainable pages. Extending the system involves adding new collections, filters, and global data modules while following the established patterns.
Updated Recent enhancements include significant IAA partners reorganization, enhanced client showcase with Diarkis, and improved capabilities page carousel ordering, demonstrating the system's flexibility to handle evolving content requirements.
Appendices
Practical Examples Index
- Create a new collection: [Collection definition:170-210](file://.eleventy.js#L170-L210)
- Add a custom filter: [Filter registration:42-165](file://.eleventy.js#L42-L165)
- Work with complex data: [Testimonials:1-24](file://src/_data/testimonials.json#L1-L24), [Resources:1-32](file://src/_data/resources.json#L1-L32), [Partners:1-14](file://src/_data/partners.json#L1-L14), [Polling:1-17](file://src/_data/polling.js#L1-17)
- Permalink control: [News:1-2](file://src/content/news/news.11tydata.json#L1-L2), [Cases:1-2](file://src/content/cases/cases.11tydata.json#L1-L2), [Team:1-2](file://src/content/team/team.11tydata.json#L1-L2), [Services:1-2](file://src/content/services/services.11tydata.json#L1-L2), [Newsletters:1-2](file://src/content/newsletters/newsletters.11tydata.json#L1-L2)
- Content frontmatter examples: [News item:1-18](file://src/content/news/2025-10-17-political-powerhouse.md#L1-L18), [Case study:1-14](file://src/content/cases/adelaide-city-fc.md#L1-L14), [Team member:1-21](file://src/content/team/01-matt-neagle.md#L1-L21)
- Updated IAA partners and client showcase: [IAA Partners:1-89](file://src/_data/iaaPartners.json#L1-L89), [Clients:1-108](file://src/_data/clients.json#L1-L108), [Capabilities:1-53](file://src/_data/capabilities.json#L1-L53), [Capabilities Page:1-98](file://src/_data/capabilitiesPage.json#L1-L98)
- Updated Template integration examples: [Homepage Carousel:49-82](file://src/index.njk#L49-L82), [Alliance Page:93-108](file://src/alliance.njk#L93-L108), [Client Marquee Macro:1-27](file://src/_includes/macros/client-marquee.njk#L1-L27)