Skip to content

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 point

Theme 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 templates

Must-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 tool

Build Configuration

The primary build system is Laravel Mix (webpack wrapper) configured in _project/_web/webpack.mix.js.

JavaScript Bundles

EntryOutputContents
Multiple source filesassets/js/min/scripts-min.jsMain bundle (scripts, ads, cookies, lazy loading, carousel)
scripts.js + othersassets/js/app-scripts.jsApp scripts (no ad-sticky)
competitions-v3.jsassets/js/min/competitions-v3-min.jsCompetition forms (Vue 3)
algolia.jsassets/js/min/algolia-min.jsAlgolia search
lightbox.jsassets/js/min/lightbox-min.jsLightbox gallery
newsletter.jsassets/js/min/newsletter-min.jsNewsletter forms
eventsguide.jsassets/js/min/eventsguide-min.jsEvents guide
Othersassets/js/min/*-min.jsFeature-specific bundles

SASS Compilation

EntryOutput
sass/style.scsscss/style-min.css
sass/dezeen-global/dezeen-global-style.scsscss/dezeen-global-style-min.css
sass/dezeen-awards.scsscss/dezeen-awards-min.css
sass/style-amp.scsscss/style-amp.css
sass/optinmonster.scsscss/optinmonster-min.css
sass/lzy_srcset.scsscss/lzy_srcset.min.css
Plugin SCSScss/plugins/*.css

Plugin Asset Copying

The build copies SCSS from plugins into the theme before compilation:

  • dezeen-services/assets/scss/widget.scss → theme sass/plugins/
  • dezeen-campaign-monitor/src/assets/sass/campaign-monitor.scss → theme sass/plugins/
  • dezeen-campaign-monitor/src/assets/js/campaign-monitor.js → theme js/plugins/
  • dezeen-ad-auris/assets/js/adauris-guard.js → theme js/plugins/ (conditional)