tenbruggencate/maintenance

Configurable branded maintenance page for Shopware 6 — admin-editable heading, lead, launch badge, auto-reload, and SEO meta

Maintainers

Package info

bitbucket.org/Bruggencate/sw-plugin-maintenance

Homepage

Issues

Documentation

Type:shopware-platform-plugin

pkg:composer/tenbruggencate/maintenance

Statistics

Installs: 13

Dependents: 0

Suggesters: 0


README

Ten Bruggencate Development

TenBruggencateMaintenance

Maintenance Page

Configurable branded maintenance page for Shopware 6. Admin-editable heading, lead, launch-window badge, auto-reload, SEO meta. Works standalone — no dependency on any theme.

License: MIT · Shopware: 6.7.x · PHP: 8.1 / 8.2

🇬🇧 English · 🇳🇱 Nederlands · 🇩🇪 Deutsch

📖 More context: Why we built this · How it compares

What it does

Shopware's default maintenance page is generic and unbranded. Rolling your own in the theme plugin couples "the store is down" copy to "the store theme", which is exactly when you can't rely on the theme. This plugin ships its own page that:

  • Survives theme failures — renders independently; if your theme has a SCSS compile error, maintenance still renders correctly
  • Admin-editable copy — heading, lead, icon emoji, launch-window badge, social CTA, SEO meta, all per sales channel
  • Auto-reload — optional interval so visitors don't have to refresh manually when the window ends
  • Snippet fallbacks — nl-NL / en-GB / de-DE built in; if the admin leaves a field blank, the snippet provides a sensible default

Install

composer require tenbruggencate/maintenance
bin/console plugin:refresh
bin/console plugin:install --activate TenBruggencateMaintenance
bin/console cache:clear

Configuration

Editable per sales channel from Settings → System → Plugins → Maintenance Page.

FieldDefaultPurpose
enabledtrueKill switch — falls back to vendor page when off
heading(snippet)Main heading
lead(snippet)Sub-heading
iconEmoji shown above the heading; leave blank to hide
launchWindow(empty)Badge text e.g. "Spring 2026"; hidden when empty
socialText(empty)Bottom CTA e.g. "Follow us on Instagram"; hidden when empty
metaTitle(snippet)SEO <title>
metaDescription(snippet)SEO meta description
autoReloadSeconds0Auto-reload interval in seconds; 0 disables

Standards

  • Performance — no runtime JS, no external font fetch, no image dependencies. The page is ~3 KB + inline SCSS.
  • SEO — emits <meta name="robots" content="noindex"> so search engines don't index the maintenance copy. metaTitle / metaDescription remain admin-editable for social previews (the page is often shared on Twitter/Instagram during launch windows).
  • GDPR — stateless. No cookies, no tracking, no data stored per visitor. Analytics (TenBruggencateAnalytics) and tracker scripts are disabled on this page by design. Full data-flow documentation in GDPR.md.
  • WCAG 2.2 AA — semantic headings (h1 / h2), visible focus states on the social CTA, colour contrast validated against the shipped palette. Screen readers announce the launch-window badge as regular text. Live axe-core audit is on-demand because it requires enabling maintenance mode on the whole stack: see docs/ACCESSIBILITY.md for the reproducer.
  • Security — all fields are escaped via Twig; HTML is not allowed in any admin field, preventing XSS via a compromised admin account.
  • Uninstallplugin:uninstall --keep-user-data preserves every per-SC maintenance copy config; plugin:uninstall without the flag drops all TenBruggencateMaintenance.config.* rows so the destructive path leaves no trace. No owned tables.

Compatibility

Core platform

ShopwarePHPStatus
6.7.x — tested against 6.7.8, 6.7.98.1, 8.2Stable
6.6.xNot supported
6.5.x and earlierNot supported

Database

EngineVersionNotes
MySQL8.0+Primary target; JSON functions used for config-row manipulation in migrations
MariaDB10.11+Tested end-to-end; earlier versions lack some JSON operator support

Browsers (storefront)

Evergreen browsers only — the two most recent stable releases of each:

BrowserDesktopMobile
Chrome / Chromium
Firefox
Safari✅ (macOS)✅ (iOS 16+)
Edge

Internet Explorer and legacy Edge are not supported. The plugin emits no runtime JS (where applicable) so graceful degradation on older browsers usually still renders content, just without progressive enhancements.

Admin browsers

Same evergreen matrix — the Shopware admin is Vue-based and has its own compatibility baseline that this plugin doesn't extend or narrow.

Development

ToolVersionScope
PHP≥ 8.1Runtime + test suite
Composer2.xDependency management
Node.js≥ 18Only needed if you edit SCSS and re-run the theme compile
Python≥ 3.9Only needed for the repo's asset-pipeline scripts (scripts/*.py)

Accessibility

WCAG 2.2 level A + AA — see docs/ACCESSIBILITY.md for axe-core audit output and per-page violations.

What we test before each release

  • Full PHPUnit unit suite against PHP 8.1 + 8.2 (source-inspection tests don't need a kernel)
  • PHPStan level 8 + PHP-CS-Fixer (@PSR12 + @Symfony)
  • Composer validate on every plugin
  • Live-DB smoke tests (plugin install → activate → route render → uninstall cycle)
  • axe-core audit on the primary storefront surfaces (see ACCESSIBILITY.md)

Related plugins

Part of the TenBruggencate Suite — small, focused plugins that play well together:

  • MultiBrand — hostname-based brand resolver + per-brand --brand-* CSS tokens. When active, the maintenance page picks up per-host brand styling automatically.
  • LegalPages — Dutch / German / English legal page templates. Legal footer links render in the maintenance footer so visitors can still reach imprint / privacy during downtime.
  • Analytics — multi-backend analytics (Matomo / Plausible). Cookieless by default, GDPR-first.
  • NewsletterLite — lightweight GDPR-safe newsletter signup with opaque-token unsubscribe.

Support

License

MIT © Ten Bruggencate Development