Project Structure
Top-Level Layout
Dezeen.com/
├── _project/
│ └── _web/ # WordPress installation root
│ ├── wp-config.php # WordPress config (not in git)
│ ├── wp-config-sample.php # Config template
│ ├── webpack.mix.js # Laravel Mix build config
│ ├── package.json # NPM dependencies
│ ├── wp-content/
│ │ ├── themes/
│ │ │ └── 2016dezeen/ # Production theme
│ │ ├── plugins/ # All plugins (custom + 3rd party)
│ │ │ ├── dezeen-*/ # 30 custom plugins
│ │ │ ├── advanced-custom-fields-pro/
│ │ │ ├── wordpress-seo(-premium)/
│ │ │ ├── wp-rocket/
│ │ │ └── ...
│ │ └── mu-plugins/ # Must-use plugins
│ │ ├── dezeen/ # Core business logic
│ │ ├── tweetable_callouts/
│ │ ├── wordpress-ray/ # Debug tool
│ │ └── *.php # Standalone mu-plugins
│ └── setup/ # Internal setup scripts
├── .circleci/ # CircleCI config (SonarCloud scan)
├── .github/ # GitHub Actions
├── cypress/ # E2E test suite
├── docker/ # Docker config files
│ └── php-dev.ini # PHP dev overrides
├── docker-compose.yml # Local Docker stack
├── docs/ # Project documentation
├── decisions/ # Architecture decision records
├── dev/ # Implementation notes
├── optimisation-reports/ # Performance analysis
├── scripts/ # Automation scripts
├── setup/ # Environment setup
│ ├── local/ # Local dev scripts
│ ├── staging/ # Staging sync scripts
│ ├── qa/ # QA environment scripts
│ ├── production/ # Production configs
│ │ ├── core/ # Varnish backend management
│ │ ├── deployhq/ # DeployHQ scripts
│ │ ├── varnish/ # Varnish VCL files
│ │ ├── server-config/ # Apache/server config
│ │ ├── wordpress/ # WP-specific production config
│ │ └── docs/ # Infrastructure docs
│ └── optimisations/ # DB indexes, tuning
├── specs/ # Technical specifications
├── support/ # Support investigations
├── Vagrantfile # Legacy Vagrant config
├── package.json # Root: Cypress + Playwright
├── VERSION # Version file (currently "2.0")
├── CLAUDE.md # AI assistant context
├── TECHNICAL_WALKTHROUGH.md # Platform handover doc
└── README.md # Project entry pointTheme Structure (2016dezeen)
2016dezeen/
├── style.css # Theme metadata header
├── functions.php # Main entry; loads modular files
├── functions/
│ ├── actions-and-filters.php # Core WP hooks
│ ├── admin.php # Admin pages and options
│ ├── ajax.php # AJAX handlers
│ ├── algolia.php # Algolia search integration
│ ├── assets.php # Script/style enqueue
│ ├── events.php # Event-specific logic
│ ├── performance.php # CLS, preload, lazy loading
│ ├── shortcodes.php # Shortcode definitions
│ ├── social-seo.php # Social/SEO meta
│ ├── theme-setup.php # Theme support, widgets, menus
│ └── utilities.php # Helper functions
├── ad_spots/ # Ad placement templates
├── amp/ # AMP template overrides
├── assets/
│ ├── css/ # Compiled CSS output
│ ├── js/ # JavaScript source + compiled
│ │ ├── min/ # Minified JS
│ │ ├── algolia/ # Algolia JS libraries
│ │ ├── awards/ # Awards scripts
│ │ ├── plugins/ # Plugin-compiled JS
│ │ ├── snippets/ # JS snippets
│ │ ├── waypoints/ # Waypoints library
│ │ └── webfonts/ # Font files
│ ├── sass/ # SCSS source
│ │ ├── components/ # Component SCSS files
│ │ ├── dezeen-global/ # Global styles
│ │ └── plugins/ # Plugin-specific styles
│ ├── images/ # Theme images
│ ├── img/ # Favicons and icons
│ └── svg/ # SVG assets
├── competitions/ # Competition templates
├── events/ # Event templates
├── feeds/ # RSS feed templates
├── includes/ # Template partials
├── newsletters/ # Newsletter templates
├── social/ # Social sharing templates
└── templates/ # Page templatesMust-Use Plugin Structure (dezeen/)
mu-plugins/
├── index.php # Loader for dezeen + tweetable_callouts
├── 0-sitemap-trim-output.php # Sitemap XML whitespace fix
├── ray-loader.php # Debug tool loader
├── smush-archive-guard.php # Prevents re-smushing old images
├── wp-rocket-cache-busting-fix.php # WP Rocket error suppression
├── dezeen/
│ ├── dezeen.php # Main loader
│ ├── autoload.php # PSR-style autoloader
│ └── src/
│ ├── configuration.php # Constants, category maps
│ ├── advanced-custom-fields.php # ACF field definitions
│ ├── rest-api-v2.php # REST API routes
│ ├── query-hooks.php # WP_Query modifications
│ ├── rewrite-the-content.php # Content DOM manipulation
│ ├── amp.php # AMP integration
│ ├── algolia.php # Algolia customisation
│ ├── dezeen-awards.php # Awards business logic
│ ├── dezeen-events.php # Events business logic
│ ├── dezeen-awards-create-taxonomies-and-cpts.php
│ ├── dezeen-events-create-taxonomies-and-cpts.php
│ ├── dezeen-edit-taxonomies.php
│ ├── hotlist.php # Hot List CPTs
│ ├── juror.php # Juror CPT
│ ├── feed.php # RSS feed hooks
│ ├── url-rewriter.php # Custom rewrite rules
│ ├── article.php # Related posts
│ ├── text-utilities.php # Text manipulation
│ ├── menu.php # Menu CSS classes
│ ├── featured-posts.php # Featured stories
│ ├── categories.php # Category logic
│ ├── archive-loop.php # Archive rendering
│ ├── right-hand-column.php # RHC content
│ ├── opening-image.php # Hero images
│ ├── inline-see-also.php # "See also" links
│ ├── templates-hooks.php # Template hooks
│ ├── image-utilities.php # Imagick trait
│ ├── date-utilities.php # Date formatting trait
│ ├── annual-list.php # Abstract base class
│ └── ... # Additional support classes
├── tweetable_callouts/
│ └── index.php # TinyMCE button plugin
└── wordpress-ray/ # Ray debugging toolBuild Configuration
The primary build system is Laravel Mix (webpack wrapper) configured in _project/_web/webpack.mix.js.
JavaScript Bundles
| Entry | Output | Contents |
|---|---|---|
| Multiple source files | assets/js/min/scripts-min.js | Main bundle (scripts, ads, cookies, lazy loading, carousel) |
scripts.js + others | assets/js/app-scripts.js | App scripts (no ad-sticky) |
competitions-v3.js | assets/js/min/competitions-v3-min.js | Competition forms (Vue 3) |
algolia.js | assets/js/min/algolia-min.js | Algolia search |
lightbox.js | assets/js/min/lightbox-min.js | Lightbox gallery |
newsletter.js | assets/js/min/newsletter-min.js | Newsletter forms |
eventsguide.js | assets/js/min/eventsguide-min.js | Events guide |
| Others | assets/js/min/*-min.js | Feature-specific bundles |
SASS Compilation
| Entry | Output |
|---|---|
sass/style.scss | css/style-min.css |
sass/dezeen-global/dezeen-global-style.scss | css/dezeen-global-style-min.css |
sass/dezeen-awards.scss | css/dezeen-awards-min.css |
sass/style-amp.scss | css/style-amp.css |
sass/optinmonster.scss | css/optinmonster-min.css |
sass/lzy_srcset.scss | css/lzy_srcset.min.css |
| Plugin SCSS | css/plugins/*.css |
Plugin Asset Copying
The build copies SCSS from plugins into the theme before compilation:
dezeen-services/assets/scss/widget.scss→ themesass/plugins/dezeen-campaign-monitor/src/assets/sass/campaign-monitor.scss→ themesass/plugins/dezeen-campaign-monitor/src/assets/js/campaign-monitor.js→ themejs/plugins/dezeen-ad-auris/assets/js/adauris-guard.js→ themejs/plugins/(conditional)