Skip to content

WordPress site build & deployment

Project Orion

The standardised, git-managed WordPress build every new Business Nebula client site is spun up from.

Orion is the control layer for a live WordPress install. It tracks what Business Nebula authors — the Mairan theme, a baseline must-use plugin, config templates, deploy tooling and runbooks — and leaves WordPress core, premium plugins, uploads and the database to Duplicator Pro packages.

Status: In-house · rolling out

Business Nebula’s internal template for client WordPress builds. Enquire to have your site built on it.

Tier repository structure
3
Paths deployed: theme and mu-plugins
2
Step client spin-up runbook
9
Inbound connections needed to deploy
0

What it is

Project Orion is the standardised WordPress build behind Business Nebula client sites. A golden-master template site holds the deployment-ready build, a persistent, licensed development site is where integration work happens, and each client site is created from the template rather than from scratch.

It is honest about what git can and cannot version. Theme code, must-use plugins and tooling live in git. Elementor templates, JetEngine definitions and RankMath settings live in the database, so Duplicator Pro packages version them instead, and the documentation says so plainly.

Who it’s for

  • Every new Business Nebula WordPress client site: Orion is the template it is spun up from.
  • The delivery team: one runbook takes a client site from template repository to verified launch.
  • Clients in wp-admin, who see subtle Business Nebula attribution and a direct support link on their dashboard.

Key capabilities

A site template with the operations built in

A minimal control layer

Git tracks only what the agency authors. Plugin state is tracked as knowledge, not files: a manifest plus a committed snapshot of installed versions.

Mairan by git subtree

The theme is pulled in as a git subtree, so theme updates arrive with one subtree pull and client repositories take them the same way.

Pull-model deploys

The server reaches out to GitHub and deploys locally, copying an allowlist of paths into the docroot. It merges rather than deletes, so other must-use plugins are never removed.

Baseline must-use plugin

Login, admin-footer and dashboard attribution with a support widget, an environment badge on non-production sites, and a decluttered dashboard.

A maintenance splash that fails loud

A branded splash toggled from the admin bar or wp-config. The public sees the splash, admins see a red indicator, and logged-in editors keep working on the real site.

Privacy at the server layer

In-progress sites sit behind cPanel Directory Privacy, never a silent noindex. A forgotten password shows a prompt at launch, and the golden master ships indexable.

Duplicator Pro packaging

Golden-master packages named orion-golden-YYYY-MM-DD, rebuilt at least monthly, each cross-referenced to a commit recording exact plugin and core versions.

Lint before anything ships

GitHub Actions syntax-checks the PHP and validates the deploy script and .cpanel.yml, so broken PHP never reaches a server pull.

How it works

Three tiers, one direction of travel

The theme, the site template and each client’s site live in separate repositories. Each tier consumes the one above it, so a fix lands upstream once and flows down to every site.

  1. Tier 1

    Mairan-wp-theme

    The theme

    Theme only. Never grows site config or deploy scripts.

    git subtree
  2. Tier 2

    Orion-wp-build

    The site template

    A GitHub template repository that consumes the theme by git subtree, with the mu-plugin, tooling and docs.

    Use this template
  3. Tier 3

    Client repositories

    One per client build

    Created with “Use this template”: a clean copy that diverges with client branding and content.

Upstream theme fixes go to Mairan and reach each client site through git subtree pull.

Deploys

The server pulls; nothing pushes in

The hosting firewall drops inbound SSH, so GitHub cannot push to it. Orion flips the model: the server pulls from GitHub over an outbound connection the firewall allows, then deploys locally.

The server pulls; nothing pushes in: The repository, then cPanel Git Version Control, then The deploy task, then The live site.

Retired: Push over SSH

GitHub Actions → rsync over SSH was built first. The firewall silently drops GitHub’s runner IPs, so it was retired.

  1. 01 · GitHub

    The repository

    Actions runs lint only. Nothing deploys from here.

    php -l
    Pulled by the server
  2. 02 · Server

    cPanel Git Version Control

    Clones the repository outside the docroot and checks out the branch the site follows.

    Update from Remote
    Deploy HEAD Commit
  3. 03 · Server

    The deploy task

    “Deploy HEAD Commit” runs .cpanel.yml, which runs the deploy script. A cron can automate it.

    scripts/cpanel-deploy.sh
    Copies the allowlist
  4. 04 · Docroot

    The live site

    Receives the allowlist only: the theme and the must-use plugins.

    themes/business-nebula/ · mu-plugins/

Never touched by a deploy

  • wp-config.php
  • .htaccess
  • uploads/
  • plugins/
  • WordPress core

Rolling back is checking out an older commit and deploying it again. Anything outside git’s scope is restored from a Duplicator package.

The boundary

What git versions, and what it can’t

Much of a WordPress site’s real state lives in the database. Orion draws the line explicitly, so nobody expects git revert to undo an Elementor edit.

What git versions, and what it can’t
LayerVersioned by
Theme code, mu-plugins, config templates, tooling, docsGit

Git (this repository)

Plugin files, WordPress coreServer + packages

Server and Duplicator packages, with versions recorded in a plugin snapshot

Database (Elementor, JetEngine, RankMath state), uploadsDuplicator

Duplicator packages only

Client spin-up

From template to launch, in order

A new client site follows the same runbook every time.

  1. Create the client repository

    From the Orion template: a clean copy with no shared history.

  2. Provision hosting

    A cPanel account or subdomain for the client site.

  3. Restore the golden master

    The latest Duplicator package handles the database, URL search-replace and config.

  4. Set the environment type

    From the wp-config reference block, with the in-progress site kept private by Directory Privacy.

  5. Wire up deploys

    Point the deploy pipeline at the new site’s docroot.

  6. Run the first deploy

    It overwrites the packaged theme with the current theme, closing any drift.

  7. Re-activate licences

    Each premium plugin is activated against the client’s domain.

  8. Verify

    Rendering, editor, CPTs, SEO settings, environment badge — and, at launch, that the site is indexable.

  9. Client work begins

    On the client repository’s own branches, still taking theme updates by subtree.

Tech stack

Built on

WordPress + Mairan
Hello Elementor parent, the Mairan theme by git subtree
Orion Baseline 2.0.0
Must-use plugin: branding, environment badge, maintenance splash
Elementor Pro
Theme Builder: headers, footers and templates
JetEngine & Crocoblock
Custom post types, meta fields and dynamic content
RankMath Pro
SEO
Duplicator Pro
Site packaging and client cloning
cPanel Git Version Control
.cpanel.yml and a Bash deploy script
GitHub
Template repository, Actions for lint only

Build on Orion

Want your site built and run this way?

Orion is how Business Nebula spins up, deploys and packages client WordPress sites. Tell us about your project, or see how our web design and development work runs.

Developed by BN

More we’ve built

Status: In-house · v1.0.0

WordPress theme framework

Project Mairan

The GSAP-powered Elementor child theme and design-token framework behind Business Nebula client projects.

Status: Pre-launch · free sets at pulsaricons.com

Animated SVG icon library

Pulsaricons

Over 24,000 animated marks in families of fifteen, each family with everyday tranches beside it.