Overview
The AEM Component Catalog serves as a centralized hub for NOVA design system components and templates. It provides a comprehensive playground environment where developers, designers, and content authors can explore, test, and document AEM components across different brand implementations.
Key Objectives
- Centralized Documentation: Single source of truth for all NOVA components and templates
- Interactive Playground: Real-time component testing and customization environment
- Brand Consistency: Validate components across different brand templates and policies
- Usage Analytics: Track component adoption and usage patterns
- Developer Experience: Streamline component discovery and implementation
Target Audience
- Developers: Component implementation and technical documentation
- Designers: Brand validation and visual consistency checks
- Content Authors: Component usage guidelines and best practices
- Creative Agencies: Brand-specific component libraries and guidelines
Architecture Overview
Project Structure
The application follows the standard AEM Maven archetype with specialized React integration:
aem-component-catalog/
├── core/ # Java services and servlets
├── ui.apps/ # AEM components and configurations
├── ui.frontend/ # Bootstrap-based CSS builds
├── ui.frontend-react/ # Main React application
│ ├── listaemcomponents-react/ # Component listing functionality
│ ├── listaemtemplates-react/ # Template listing functionality
│ └── playground-react/ # Interactive playground environment
└── all/ # Package assembly
Screenshot Location: Project structure diagram showing the Maven multi-module layout
Key Technologies
- Backend: AEM 6.5+, Java, OSGi
- Frontend: React, JavaScript ES6+
- Styling: Bootstrap, Custom CSS
- Build Tools: Maven, Webpack
Installation & Setup
Prerequisites
- AEM Author and Publish instances
- Maven 3.6+
- Node.js 14+
- Required permissions (see Permissions section)
Installation Steps
- Build the Project
mvn clean install - Deploy Package
- Install
aem-component-catalog.all-1.0.0-SNAPSHOT.zipfromall/target/ - Deploy to both Author and Publish instances
- Install
- Create Catalog Pages
Component Catalog Page:- Create page using Component Catalog template
- Configure "List AEM Components" component:
- Set component groups to include
- Define component paths
- Configure template filters
Component configuration dialog showing the Components tab with groups and paths settings
Template Catalog Page:- Create page using Template Catalog template
- Configure "List AEM Templates" component:
- Set template path patterns
- Define live usage query paths
Template configuration dialog showing the Templates tab with path pattern settings - Configure Navigation
- Update header component properties
- Link to created catalog pages
- Set up breadcrumb navigation
Header properties configuration screen showing navigation links setup
Configuration Guide
OSGi Configuration
Configuration Service
com.xpediantsolutions.ccatalog.core.services.impl.ConfigurationServiceImpl
| Property | Description | Default |
|---|---|---|
| Playground Base Path | Workspace creation path | /var/xpediant/playgrounds |
| Playground Template Path | Template for playground pages | /conf/catalog/settings/wcm/templates/playground |
| Max Workspaces | Maximum concurrent workspaces | 10 |
| Workspace Cleanup Time | Workspace lifespan (ms) | 3600000 |
Screenshot Location: OSGi Configuration Service settings screen showing all configuration properties
Dialog Proxy Configuration
- Dialog Content Command: Custom dialog code replacement
- Dialog Proxy Servlet: Adds custom JavaScript to all dialogs
Component Configuration
List AEM Components
Components Tab:
- Groups to Include: Filter by component groups (e.g., "content", "structure")
- Paths to Include: Specific component paths to display
- Exclusion Patterns: Components to hide from catalog
Components Tab configuration showing group selection and path inclusion settings
Templates Tab:
- Template Title Pattern: Regex for template filtering
- Template Path Pattern: Path-based template filtering
- Example:
/conf/xpomnichannel/settings(.)*
Templates Tab configuration showing regex pattern fields
Live Usage Tab:
- Query Path: Scope for usage analytics (default:
/content)
Live Usage Tab showing query path configuration field
List AEM Templates
Similar configuration structure with template-specific patterns and usage tracking.
Permissions Setup
Author Instance
Content Authors:
- Read access to
/apps,/conf,/content,/libs - Create/modify access to catalog pages
Screenshot Location: Author permissions configuration screen showing user group permissions
System User (adaptive-write):
- Full CRUD access to
/var/xpediant - Read access to component and template paths
Publish Instance
Anonymous Users:
- Read access to client libraries and dialogs
- Limited access to catalog functionality
System User:
- Same permissions as Author instance
- Workspace management capabilities
User Experience
Component Playground
The playground provides an interactive environment for component testing:
- Component Selection
- Browse components by group or search
- View component thumbnails and descriptions
- Access component documentation
Component list page showing grid layout with component cards, search functionality, and group filters - Interactive Configuration
- Use actual AEM dialog fields
- Real-time preview updates
- Multi-brand template testing
Playground page showing component dialog on left, live preview on right, with brand template selector at top - Workspace Management
- Personal workspace per user
- Save and restore configurations
- Share workspace via URL parameter
Workspace management interface showing save/load options, clear workspace button, and share link functionality - Brand Validation
- Toggle between brand templates
- Apply brand-specific policies
- Visual consistency checking
Screenshot Location: Brand template selector dropdown with before/after comparison of component rendering across different brands
Key Features
Dialog Customization
- Hide specific fields using
granite:class="hide-in-catalog" - Custom JavaScript injection for enhanced UX
- Proxy-based dialog serving for modifications
Screenshot Location: Component dialog showing hidden fields example with granite:class attribute highlighted
Visual Assets
- Component Thumbnails: Auto-sourced from
icon.pngin component folders - Template Thumbnails: Auto-sourced from
thumbnail.pngin template folders - Brand Assets: Dynamic loading based on template selection
Component grid showing various component thumbnails, and file structure showing icon.png placement
Workspace System
- Cookie-based Tracking:
XP_COMP_CTLG_IDfor workspace identification - Automatic Cleanup: Configurable workspace expiration
- Sharing Capability: URL parameter-based workspace sharing
- Concurrent Limits: Configurable maximum workspace count
Screenshot Location: Share workspace modal showing generated URL with workspace ID parameter
User Workflows
For Developers
- Component Discovery
- Browse component catalog by group
- Search by component name or functionality
- Review component documentation and usage examples
Component discovery page showing component details and documentation
- Implementation Testing
- Configure component in playground
- Test across multiple brand templates
- Validate responsive behavior
- Export configuration for implementation
- Documentation Contribution
- Add usage notes and best practices
- Document component variations
- Update implementation guidelines
For Designers
- Brand Consistency Validation
- Test components across brand templates
- Review applied brand policies and styles
- Identify visual inconsistencies
- Document brand-specific variations
- Component Review
- Validate design implementation
- Test component states and interactions
- Provide feedback on visual refinements
For Content Authors
- Component Learning
- Explore available components
- Understand component capabilities
- Practice with dialog configurations
- Content Planning
- Test content variations
- Preview different brand applications
- Plan page layouts and component usage
Template selection and usage workflow for content planning
Advanced Features
Usage Analytics
- Component Usage Tracking: Real-time usage statistics across sites
- Template Adoption Metrics: Track template implementation patterns
- Performance Insights: Identify most/least used components
- Trend Analysis: Usage patterns over time
Usage analytics dashboard showing component and template adoption metrics
Custom Styling & Theming
- CSS Variable Documentation: Central repository for design tokens
- Brand-specific Overrides: Template-based style variations
- Live CSS Editing: Real-time style modifications in playground
- Style Export: Generate CSS for implementation
Integration Capabilities
- Figma Integration: Link to design system resources
- Version Control: Track component and template versions
- Release Notes: Automated change documentation
- API Access: Programmatic catalog data access
Author vs Publish Experience
Author Instance Capabilities
- Full Admin Access: Complete configuration and management
- Content Authoring: Create and modify demo content
- Workspace Management: Advanced workspace controls
- Analytics Dashboard: Comprehensive usage reporting
Author instance interface showing admin panel, authoring tools, and advanced configuration options
Publish Instance Capabilities
- Read-only Catalog: Browse components and templates
- Limited Playground: Basic component testing
- Shared Workspaces: Access via URL parameters
- Public Documentation: Component usage guidelines
Publish instance interface showing simplified navigation and read-only component catalog
Troubleshooting
Common Issues
Workspace Creation Failures:
- Check OSGi configuration for playground paths
- Verify system user permissions
- Review workspace count limits
Component Loading Errors:
- Validate component group configurations
- Check path inclusion/exclusion patterns
- Verify template path patterns
Dialog Rendering Issues:
- Review dialog proxy configuration
- Check custom JavaScript injections
- Validate granite:class attributes
Performance Optimization
- Workspace Cleanup: Regular automated cleanup
- Caching Strategy: Component and template metadata caching
- Resource Loading: Optimized asset loading
- Query Optimization: Efficient usage analytics queries
Development Guidelines
Adding New Components
- Follow standard AEM component structure
- Include
icon.pngfor catalog thumbnails - Use
granite:class="hide-in-catalog"for fields to hide - Document component usage and variations
- Test across brand templates
Extending Functionality
- Custom Dialog Behaviors: Use dialog proxy configuration
- Additional Analytics: Extend usage tracking services
- New Brand Templates: Follow template configuration patterns
- Custom Styling: Leverage CSS variable system
Project Status & Next Steps
Current Status ✅
- Core functionality implemented and tested
- Component and template listing operational
- Interactive playground environment functional
- Multi-brand template support working
- Basic usage analytics in place
In Progress 🔄
- Design system integration and visual refinements
- Advanced analytics and reporting features
- Documentation and user guide completion
- Performance optimization and caching
Upcoming Enhancements 📋
- Figma Integration: Direct design system connectivity
- Advanced Analytics: Detailed usage insights and trends
- API Development: Programmatic access to catalog data
- Mobile Optimization: Enhanced mobile user experience
- Automated Testing: Component validation and testing suite
Success Metrics
- Adoption Rate: Component usage across projects
- User Engagement: Playground session duration and frequency
- Documentation Quality: User feedback and contribution rates
- Performance: Page load times and system responsiveness
Support & Resources
Team Contacts
- Technical Lead: Development and architecture questions
- Design Lead: Visual design and brand consistency
- Product Owner: Feature requests and roadmap planning
Documentation Resources
Getting Help
- Technical Issues: Create ticket in project tracking system
- Feature Requests: Submit via product backlog
- Design Questions: Reach out to design team leads
- General Questions: Use team communication channels
This documentation is maintained by the Component Catalog team and updated regularly to reflect the latest features and changes.
Can I refer to an image in the clientlibs folder in each AEM and React component?
<img
src="/clientlibs/aem-component-catalog/clientlibs/clientlib-react/resources/placeholder.svg" />
apps/aem-component-catalog/ components/page page.html
clientlibs/clientlib-react/resources - placeholder.svg - image-for-
Tips
Don't forget to stop any AEM syncing before doing a mvn clean install.
Additional Tools & Utilities
- AEM Sync CLI 🚀
- DSS Email Signature Generator
- Markdown <-> Jira Markup Converter
- Figma to AEM Component Exporter
- Style Transformer Tool
- @abbvie-unity/design-tokens
- @ariakit/core
- @ariakit/react
- @ariakit/react-core
- @react-aria/progress
- @react-aria/textfield
- @react-aria/utils
- @react-aria/visually-hidden
- @tanstack/react-table
- @tanstack/react-virtual
- ariakit
- ariakit-utils
- clsx
- date-fns
- lodash.deburr
- lodash.groupby
- lodash.isempty
- pure-react-carousel
- react-collapsed
- react-datepicker
- react-dropzone
- react-hot-toast
- react-is
- react-polymorphic-types
- react-popper-tooltip
- @babel/preset-env
- @babel/preset-react
- @babel/preset-typescript
- @chromatic-com/storybook
- @commitlint/cli
- @commitlint/config-conventional
- @fortawesome/fontawesome-common-types
- @fortawesome/fontawesome-svg-core
- @fortawesome/react-fontawesome
- @react-types/shared
- @storybook/addon-a11y
- @storybook/addon-actions
- @storybook/addon-essentials
- @storybook/addon-interactions
- @storybook/addon-links
- @storybook/addon-mdx-gfm
- @storybook/manager-api
- @storybook/mdx1-csf
- @storybook/react
- @storybook/react-vite
- @storybook/test
- @storybook/test-runner
- @storybook/theming
- @tailwindcss/vite
- @testing-library/jest-dom
- @testing-library/react
- @testing-library/user-event
- @types/jest-axe
- @types/lodash
- @types/lodash.deburr
- @types/lodash.groupby
- @types/lodash.isempty
- @types/node
- @types/react
- @types/react-datepicker
- @types/react-dom
- @types/react-is
- @types/resize-observer-browser
- @typescript-eslint/eslint-plugin
- @typescript-eslint/parser
- @vitejs/plugin-react-swc
- @vitest/coverage-v8
- @vitest/ui
- ag-grid-react
- chromatic
- copyfiles
- dependency-cruiser
- esbuild-node-externals
- esbuild-plugin-svgr
- esbuild-sass-plugin
- eslint
- eslint-config-airbnb
- eslint-config-airbnb-typescript
- eslint-config-prettier
- eslint-plugin-import
- eslint-plugin-jsx-a11y
- eslint-plugin-react
- eslint-plugin-react-hooks
- eslint-plugin-storybook
- husky
- identity-obj-proxy
- is-ci
- jest-axe
- jsdom
- lodash
- postcss-modules
- postcss-scss
- prettier
- prettier-plugin-tailwindcss
- react
- react-dom
- react-syntax-highlighter
- remark-gfm
- resize-observer-polyfill
- rimraf
- sass
- storybook
- tailwindcss
- ts-morph
- tsup
- tsx
- typescript
- vite
- vite-plugin-dts
- vite-plugin-node-polyfills
- vite-plugin-svgr
- vite-tsconfig-paths
- vitest