Project Status
herzfabrik.de is live and actively used by the church community. The website pulls its dynamic content in real-time from the Kirchenwerk CRM.
The Challenge: Dynamic Content, Static Website
Church websites have a fundamental problem: content changes constantly. A different service next Sunday, a new small group starting, the sermon series changes. And the information needs to be current on the website - otherwise visitors show up to an event that doesn’t exist.
The classic solution: Someone updates the website manually. That works for two weeks, then someone forgets. Herzfabrik already manages their data centrally in the Kirchenwerk CRM. The question was: How do we get that data live onto the website without duplicate maintenance?
Why Sulu CMS Instead of WordPress?
We chose Sulu CMS - an enterprise-grade content management system built on Symfony. Not because WordPress is bad, but because we had specific requirements:
- → Custom Content Types - Sulu allows defining arbitrary page types via XML. Events, sermons, small groups - each with its own structure.
- → Twig Templates - Full control over the HTML. No plugin dependencies, no theme framework overhead.
- → Symfony Ecosystem - Custom bundles, dependency injection, event system. Perfect for CRM integration.
- → Admin Interface - A clean backend for editors that doesn’t require training.
The Tech Stack in Detail
The website is built on proven technologies that have been battle-tested in enterprise projects. No bleeding edge - solid, maintainable software.
Sulu CMS + Symfony
Sulu on the latest Symfony with PHP. The database is MariaDB via Doctrine ORM, the content repository runs on Jackalope PHPCR. This gives us Symfony’s flexibility combined with Sulu’s content management experience.
Page types are defined via XML: homepage, events, sermons, offerings, small groups, locations, contact. Each type has its own template with specific content blocks.
Stack: Symfony, Sulu CMS, PHP, MariaDB, Jackalope PHPCR
CRM Integration Bundle: The Core Piece
The CrmIntegrationBundle is a custom Symfony bundle that connects Sulu CMS with the Kirchenwerk API. It provides Twig functions that let editors embed CRM data directly into pages:
{{ crm_upcoming_events(limit) }}
{{ crm_locations() }}
{{ crm_small_groups() }}
{{ crm_events_by_category(category, limit) }}
{{ crm_groups_grouped_by_category() }}
Additionally, there are JSON API endpoints for frontend JavaScript (e.g., interactive filters), a configurable cache layer with TTL, and a webhook receiver that selectively invalidates the cache when CRM data changes.
The second bundle, CrmContentSyncBundle, provides Symfony commands for batch synchronization: SyncEventsCommand, SyncSmallGroupsCommand, SyncStandorteCommand, SyncAngeboteCommand, SyncPredigtenCommand.
Features: Twig Functions, JSON APIs, Caching Layer, Webhooks, Batch Sync Commands
SCSS Design System + Twig Components
The frontend uses a structured SCSS architecture: abstracts (variables, mixins), base (reset, typography), layout (grid, header, footer), components (buttons, cards, navigation), pages, and utilities. Built with Webpack Encore.
Typography is based on Brandon-Grotesque with Inter as fallback. Colors: dark blue (#2c3e50) as primary, red (#e74c3c) as accent. Responsive breakpoints from sm (640px) to 2xl (1536px). WCAG 2.1 AA compliant.
Reusable Twig components (hero, event cards, service highlights, team highlights, CTA sections, section headers) ensure consistent design across all page types.
Stack: SCSS, Webpack Encore, Brandon-Grotesque, Responsive Design, WCAG 2.1 AA
Docker Deployment
The website runs in Docker containers: PHP application (port 8352) and MariaDB (port 3307). Health checks for both services ensure problems are caught early. Volumes for uploads, media cache, and sessions ensure data persistence.
Infrastructure: Docker Compose, PHP + MariaDB Containers, Health Checks, Volume Management
The CRM Integration in Detail
The real challenge wasn’t the website itself - it was the seamless connection of two different systems. Sulu CMS (PHP/Symfony) and Kirchenwerk CRM (TypeScript/Convex) speak different languages. The CRM Integration Bundle translates.
Caching Strategy
CRM responses are cached with configurable TTL. On API errors, the cache serves as fallback - the website never shows empty pages, just the last known data.
Webhook Invalidation
The CRM sends webhooks on data changes. The cache is selectively invalidated - not completely cleared. Unaffected pages stay performant.
Batch Sync
For initial data synchronization and larger changes, Symfony commands sync events, groups, locations, and sermons in bulk.
Admin Configuration
CRM API URL, timeout, cache TTL, and API keys are configurable through the Sulu admin interface - no deployment needed for changes.
Website Features
Events & Services
Automatically loaded from the CRM, filterable by category and location. Detail pages with description, venue, and registration options.
Sermon Archive
All sermons with listing, detail pages, and RSS feed. Embedded from the CRM, searchable, and filterable by series.
Small Groups
Grouped by category, with target audience display (families, youth, etc.), contact information, and child-friendly filter.
Location Pages
Vogtland and Erzgebirge with dedicated pages. Addresses, directions, teams, and location-specific events.
Status: Live and Operational
herzfabrik.de is in production use.
- ✓ Sulu CMS with custom content types
- ✓ CRM Integration Bundle with live data
- ✓ Responsive design (WCAG 2.1 AA)
- ✓ Webhook-based cache invalidation
- ✓ Docker deployment with health checks
- ✓ Component library with reusable Twig blocks
Conclusion: CMS Integration as a Competitive Advantage
herzfabrik.de shows what’s possible when you don’t treat a website as an isolated project, but as part of an ecosystem. The CRM integration doesn’t just save time on content maintenance - it ensures the website always reflects the current state of the church. And with the combination of Sulu CMS for editorial content and Kirchenwerk for dynamic data, a website emerges that can do both: look professional and stay automatically up-to-date.
Need a website with CRM integration? Contact us - we integrate your existing systems.