PATH:
home
/
sparklp6
/
public_html
/
website_356c8563
/
wp-content
/
plugins
/
bluehost-wordpress-plugin
/
docs
# Architecture ## Module system (Newfold Module Loader) The plugin uses the **Newfold Module Loader**. Composer-installed modules (e.g. `newfold-labs/wp-module-*`) register with a shared container and run in the Bluehost brand context. ### Container and bootstrap - **`bootstrap.php`** runs after the main plugin file and vendor autoload: - Creates `NewfoldLabs\WP\ModuleLoader\Container` and registers the Bluehost plugin with it (id `bluehost`, brand, install date). - Sets **context** (e.g. `brand.name` = `bluehost`) via `NewfoldLabs\WP\Context`. - Registers filter-based overrides for things like cache types and marketplace brand (so platforms like Atomic can change behavior). - Passes the container into the loader with `setContainer()`. - **Modules** are Composer dependencies. They register with the same container and receive the plugin instance and context. ### Key modules (examples) - **wp-module-performance** – Performance/caching features. - **wp-module-coming-soon** – Coming soon page. - **wp-module-ecommerce** – E-commerce integrations. - **wp-module-marketplace** – Plugin/theme marketplace (subnav and UI). - **wp-module-staging** – Staging environments. - **wp-module-onboarding** – Onboarding flows. Module code lives in `vendor/newfold-labs/`; the plugin does not ship their source in this repo, only references them via Composer. ### Context and platform - **Context** is used for brand and environment (e.g. `bluehost` vs `bluehost-cloud` on Atomic). - Filters such as `newfold/container/cache_types` and `newfold/container/marketplace_brand` allow host/platform-specific overrides without changing core plugin code. ## PHP and React - **PHP** handles: plugin bootstrap, admin menu, asset enqueue, REST API, upgrades, compatibility checks, and integration with WordPress and modules. - **React** is a single-page admin app: one main entry (and optional portal entry points for modules). It is built with webpack and loaded only on the plugin’s admin page(s). - **Bridge:** The plugin passes data into the app via `window.NewfoldRuntime` (and related globals). The app calls the REST API (e.g. `/bluehost/v1/settings`) and uses module-provided capabilities/features when present. ## Entry points | Layer | Entry | |-------|--------| | Plugin | `bluehost-wordpress-plugin.php` → defines constants, compat checks, then requires `bootstrap.php`. | | Bootstrap | `bootstrap.php` → autoload, container, context, updater, upgrades, then `inc/Admin.php` and other `inc/` files. | | Admin UI | `inc/Admin.php` enqueues the script from `build/<version>/index.js` and mounts the app in the page. | | React app | `src/app/index.js` (or equivalent) renders the router; routes live in `src/app/data/routes.js`. | ## Portals Some module UIs mount into dedicated DOM nodes (portals), for example: - `nfd-coming-soon-portal` - `nfd-next-steps-portal` - `nfd-performance-portal` - `nfd-staging-portal` The main app may redirect to separate admin pages (e.g. `admin.php?page=nfd-staging`) for staging or performance; see routes and [frontend.md](frontend.md). ## Version and build - The plugin version is read from the main plugin file and `BLUEHOST_PLUGIN_VERSION`; the same value must exist in `package.json` for the build path. - Built assets live under `build/<version>/` so each release has a clear asset set; see [development.md](development.md) and [release.md](release.md).
[-] frontend.md
[edit]
[-] .htaccess
[edit]
[-] testing.md
[edit]
[-] workflows.md
[edit]
[-] reference.md
[edit]
[-] backend.md
[edit]
[-] integrations.md
[edit]
[-] api.md
[edit]
[-] getting-started.md
[edit]
[-] index.md
[edit]
[-] release.md
[edit]
[-] development.md
[edit]
[-] architecture.md
[edit]
[-] modules.md
[edit]
[+]
..
[-] overview.md
[edit]