Personal portfolio and design studio WordPress site for Bain Design. A custom WordPress theme
(bain-design-theme, based on Underscores) plus a companion plugin (bd-custom) that carries all
site-specific business logic.
- Local URL:
https://bain.design.ddev.site - Production URL:
https://bain.design
- DDEV (local environment — replaces the old grunt/bower workflow entirely)
- Docker
ddev start # start the local environment
ddev wp plugin list # verify bd-custom is activeThe bd-custom plugin must be active — it registers all custom post types. If CPT queries
come back empty, check it first.
There is no build step. CSS and JS are edited directly in the theme:
public_html/wp-content/
themes/bain-design-theme/
assets/css/tokens.css # design tokens — CSS custom properties only; editor-safe
assets/css/base.css # element styles + brand utilities; front-end only
assets/css/theme.css # layout + components via @layer; depends on tokens + base
assets/js/dist/main.min.js # vanilla JS interaction layer (no build step)
inc/bain-design-system.php # PHP template-tag helpers (bain_ prefix)
templates/ # template parts (postcard, portfolio, related-*)
plugins/bd-custom/
inc/post-types/register.php # CPT + taxonomy registration (bd324_ prefix)
inc/helpers/helpers.php # shared utilities
acf-json/ # ACF field groups (version-controlled)
WP-CLI runs inside the DDEV container:
ddev wp <command>- Base branch:
develop— commit directly todevelop; no feature branches or PRs. masteris the production branch. It is behinddevelopand must never be committed to directly.
Production access and deployment details live in CLAUDE.md (kept out of this README deliberately).
Earlier versions of this project used an npm/bower/grunt pipeline (grunt/, sass/ directories
remain from that era). That pipeline is retired: the config files it referenced (Gruntfile.js,
bower.json, package.json) no longer exist, and no build tooling is required to work on the
site today.