Architecture
Request Flow
Production Infrastructure
┌──────────────────┐
│ Cloudflare │
│ CDN + WAF │
└────────┬─────────┘
│
┌──────────────┴──────────────┐
│ │
┌──────┴──────┐ ┌───────┴─────┐
│ Varnish 1 │ │ Varnish 2 │
└──────┬──────┘ └───────┬─────┘
│ │
└──────────────┬──────────────┘
│
┌────────┬───────────┼───────────┬────────┐
│ │ │ │ │
┌──┴──┐ ┌──┴──┐ ┌──┴──┐ ┌──┴──┐ │
│ WS1 │ │ WS2 │ │ WS3 │ │ WS4 │ │
└─────┘ └─────┘ └─────┘ └─────┘ │
│
┌───────────────────────┘
│
┌─────┴─────┐ ┌──────────┐
│ MySQL │ │ Redis │
│ Database │ │ Cache │
└───────────┘ └──────────┘
┌──────────────┐
│ Admin Server │ admin.dezeen.com
│ (separate) │ WordPress admin only
└──────────────┘Key Architecture Decisions
Separate Admin Server
WordPress admin (admin.dezeen.com) runs on a dedicated server, isolating editorial traffic from public web traffic. This prevents heavy admin operations (bulk edits, imports) from affecting frontend performance.
Varnish Page Cache
Two Varnish servers sit between Cloudflare and the Apache web nodes. Varnish caches full HTML pages with a ~1 day TTL. Cache invalidation happens via:
- Automatic purge on post publish/update
dezeen-cloudflare-purge-managerplugin for Cloudflaredezeen-cache-controlplugin for Cache-Control headers
Static Assets on Separate Domain
Media and compiled assets are served from static.dezeen.com, controlled by the STATIC_ASSETS_DIRECTORY and DZN_TEMPLATE_DIRECTORY constants. This enables independent CDN caching and cookie-free asset delivery.
Laravel Platform
A separate Laravel application handles Awards submissions, Competitions, and Longlists at the /platform path. WordPress communicates with it via REST API authenticated with JWT.
WordPress Application Layers
Responsibility Split
| Layer | Responsibility |
|---|---|
| mu-plugins/dezeen/ | CPT/taxonomy registration, REST API, core business logic, content manipulation, awards/events/hotlist systems |
| dezeen- plugins* | Feature modules (search, newsletters, ads, caching, feeds, etc.) |
| 2016dezeen theme | Templates, asset compilation, shortcodes, admin options, frontend rendering |
| 3rd-party plugins | ACF (content modelling), Yoast (SEO), WP Rocket (caching), Smush (images) |
Database
| Property | Value |
|---|---|
| Engine | MySQL 5.7 |
| Prefix | vetg_ |
| Charset | latin1 |
| Custom tables | vetg_competition_visibility, vetg_dezeen_services_data, vetg_events_guide, vetg_events_guide_types, vetg_events_guide_city_guides |
Unknowns / Needs Verification
- Redis status:
WP_REDIS_HOSTis defined in wp-config.php buttechnical-debt-and-roadmap.mdstates Redis is "planned but not yet implemented". Verify if Redis is active in production. - Varnish VCL files: Referenced in
setup/production/varnish/but exact purge rules need inspection ofvarnish-1-v8.vlcandvarnish-2-v8.vlc. - Load balancer: Whether Cloudflare or Jelastic handles round-robin to Varnish nodes.