Component Configuration Checklist
1. Overview
This page answers one question, component by component: what has to be configured, and what must the customer provide, before this component can be switched on?
It exists to be used twice. First when scoping a new customer, to decide which components they get and what to ask them for. Then during commissioning, as a checklist worked through to completion.
|
This is a working document. It currently covers the WordPress event website and the components that hang off it. Other parts of the offering will be added over time, and existing sections will gain detail as settings are discovered. An absent section means not yet written, never nothing to configure. |
2. How to read this page
Every setting below is labelled with where it lives. That distinction matters more than the value itself, because putting a setting in the wrong place is the most common way a site is commissioned wrong.
| Location | What it is | Rules |
|---|---|---|
Manifest |
The ArgoCD Application for the site, |
Anything that differs between deployments. A chart default is a fallback, not a decision — if it matters for this customer, state it here even when the default already matches. |
Secret |
A Kubernetes Secret in the site’s namespace, named by |
Every credential, without exception. Reaches the container through |
Declared option |
|
The enforced state. In the immutable posture it is re-applied on every start, so a change made in wp-admin is reverted on the next deploy. Never put a credential here — it is git-tracked and rendered into a ConfigMap. |
wp-admin |
Set once by a human in the WordPress admin interface. |
Where a setting is either secret, or interactive (an OAuth consent), or genuinely the site owner’s to change. Not reproducible — record that it was done. |
Media |
A file uploaded to the WordPress media library, on the uploads volume. |
The only writable place for assets on an immutable image. Note the filesystem path, not just the URL — some settings need the path. |
Out-of-band |
Something outside the cluster or done once before first deploy: DNS, a database schema, a licence, a mailbox. |
Usually the long-lead item. Start these first. |
|
The single rule that overrides the table: a credential never enters git. |
3. WordPress Website
The event website — WordPress and WooCommerce on the Roots Bedrock layout, baked into an immutable image and deployed by Helm through ArgoCD. See Immutable WordPress Architecture for the design and WordPress Dev Site Provisioning for the dev-site variant.
3.1. Base site
Required for every deployment. Nothing else in this section works until these are in place.
| Item | Detail |
|---|---|
DNS |
An A record for each public hostname pointing at the ingress controller’s address. Needed before first deploy, because cert-manager cannot complete the ACME challenge without it. |
TLS |
Issued automatically by cert-manager from the |
Database |
A dedicated schema and user on the shared MySQL server. Never an existing populated schema —
a fresh |
Image registry access |
The |
| Setting | Notes |
|---|---|
|
Published Helm chart version. Bumping it rolls the site — see the downtime note below. |
|
Image built by |
|
Must be unique per site. Two releases in one namespace with the same fullname collide on every resource they create. |
|
Name of the Secret below. |
|
The public origin, and that origin plus |
|
Connection to the schema created above. |
|
Used for |
|
|
|
Canonical host first; each host gets its own certificate. |
|
Uploads and backup volumes. Both carry |
| Key | Notes |
|---|---|
|
For the database user above. |
|
The eight WordPress salts. Generate per site. Rotating them invalidates every session and cookie. |
|
The initial administrator, created on first install only. |
| Setting | Notes |
|---|---|
|
Active theme. Harvested from the dev site, so a theme switch promotes like any other change. |
|
Activation list, in order. This list replaces the chart default rather than merging with it — Helm does not merge lists — so a plugin added to the chart is not picked up by a manifest that overrides this key. |
|
Applied on first install only, then never touched. |
|
Applied on first install only. |
|
Deploying takes the live site down for one to three minutes. The Deployment is single-replica
with |
3.2. Mail
Outbound email for the site, through the FluentSMTP plugin. Without it there is no transport at
all: the image carries no mail transfer agent and sendmail_path points at a binary that does
not exist, so every wp_mail() call fails silently — WooCommerce order mail, password resets,
form notifications and backup reports alike.
See FluentSMTP for the plugin, and SMTP Configuration for how the EMS Spring services reach the same connector.
Three delivery routes are supported, because the choice is a customer question rather than a platform property.
mail.provider |
Use when | Credentials |
|---|---|---|
|
Any authenticated SMTP server, or an IP-allowlisted relay. The generic route and the default. |
|
|
Microsoft 365 via Graph, for our own corporate tenants. |
|
|
Amazon SES. For volume, and required when mail must originate from the customer’s own domain. |
|
|
A customer’s own sending domain cannot use our tenant’s connector. SPF is evaluated against the
From domain, so no amount of configuration on the Myriad Events connector will make
|
| Setting | Notes |
|---|---|
|
Defaults to |
|
One of the three above. |
|
|
|
Whether to attempt SMTP authentication. See the warning below — this is not a "more secure when on" setting. |
|
|
|
The From identity. Must be a domain the relay will accept. |
|
|
|
Accept mail and never deliver it. For any site that must not reach a real recipient — in particular a dev site holding refreshed production customer data. |
|
FluentSMTP’s own send log, which records the actual result of each send. This is what to read when someone reports a missing email. |
|
The Myriad Events Exchange connector does not authenticate, and must not be asked to.
So The consequence to carry forward: delivery depends on the cluster’s egress address staying on that connector. If the cluster is renumbered, mail stops — and it stops with a relay denial rather than an authentication error, so look there first. |
-
fluent-smtppresent inbootstrap.plugins— an inactive plugin hooks nothing, and the site will fall through to the missingsendmailwhile the mail configuration looks correct. -
Route chosen and its credentials in the Secret, if that route needs any.
-
Sender mailbox exists and is monitored — replies go there.
-
SPF and DKIM published for the sending domain, where it is not one of ours.
-
Test send confirmed in the FluentSMTP log, not merely a
truereturn fromwp_mail().
3.3. PDF Invoice
Attaches a branded PDF invoice to WooCommerce order email. Two plugins, and the activation order matters: the vendor extension after WooCommerce, ours after the vendor, because ours registers no hooks without it.
See WooCommerce PDF Invoices and EMS PDF Invoice.
| Item | Detail |
|---|---|
Vendor licence |
WooCommerce PDF Invoices is a paid woocommerce.com extension, licensed per site. It cannot be
auto-fetched — the zip is staged by hand into |
Supplier identity |
The legal entity issuing the invoice, which is often not the event brand. Collect the registered name, trading address, company registration number and — if and only if the entity is registered — the VAT number. |
| Setting | Notes |
|---|---|
|
Trading name shown at the head of the invoice. |
|
Address block. Newlines are converted to line breaks, so a multi-line value works. |
|
Registered legal entity name. |
|
Registered address. |
|
Company registration number. |
|
VAT registration number. Omit entirely when the entity is not a registered VAT vendor. |
|
First invoice number. Not optional — see the warning below. |
|
Prefix on the rendered invoice number, for example |
|
Attachment filename, without the extension. Tokens: |
|
Leaving The plugin guards with |
|
The invoice number is not the order number. It is a separate sequence: order 707 is invoice
This also explains a filename that looks wrong: the default |
|
Only a registered VAT vendor may issue a document headed "Tax Invoice". The term is reserved by
the Value-Added Tax Act. For an entity that is not registered, set Myriad Events (Pty) Ltd is not a registered VAT vendor, which is why the Tour de Worcester site is configured exactly that way. |
| Setting | Notes |
|---|---|
|
|
|
Primary brand colour. Take it from the live site rather than picking one — the theme’s button and accent colours are the brand in practice. |
|
Text drawn on the brand colour. Check it is legible in print, not just on screen. |
|
Remaining palette. Left at defaults unless the brand demands otherwise. |
|
See the media note below. |
|
Bounding box for the logo. |
|
Order-meta keys searched for the customer’s VAT number. Set to an empty string to remove the row. |
|
Two custom order-meta slots — label plus the meta keys to resolve. Left at defaults they resolve empty and render nothing. |
|
Whether to print the EFT payment card. |
|
Bank details, required only when |
| Asset | Detail |
|---|---|
Invoice logo |
Upload through wp-admin Media, then set |
-
Vendor zip staged in
packages/at the pinned version before the image build. -
Both plugins in
bootstrap.plugins, afterwoocommerceand in the right order. -
Supplier identity collected and set; VAT number present or deliberately absent.
-
invoice_titlematches the entity’s VAT status. -
Logo uploaded and
logo_pathset to the filesystem path. -
A real order produces a PDF with the right colours, title, identity block and no raw placeholder tokens.
3.4. WooCommerce
The store itself — products, cart, checkout and orders. See WooCommerce.
| Setting | Notes |
|---|---|
|
|
|
The selling entity’s address. Customer-facing — WooCommerce renders it into the footer of
every order email through |
|
Symbol placement, for example |
|
Country and province as |
|
Set |
|
Suppress the marketing nags in wp-admin. |
| Setting | Detail |
|---|---|
Tax configuration |
Whether prices include tax, and the rates. Follows the entity’s VAT status. |
Shipping zones |
Live in their own database tables rather than |
Store pages |
Shop, Cart, Checkout, My Account and Refund/Returns are created on first install. Confirm they resolve rather than assuming. |
| Setting | Notes |
|---|---|
|
Heading band and accent in every order email. WooCommerce derives readable text against it, so only the base colour needs declaring. The shipped default is WooCommerce’s own purple — if this is not set, customer email is branded for WooCommerce rather than for the event. |
|
The visible From, and the address WooCommerce prints in "contact us at …". Distinct from the
envelope sender, which FluentSMTP pins separately via |
|
The footer under every order email. Placeholders: |
|
The per-email sign-off. This is not the footer, and confusing the two costs an hour — see the note below. |
|
The sign-off line and the footer are different settings. The line reading "Thanks for using
…" or "Thanks again! If you need any help with your order, please contact us at …" is
Its default also changes depending on whether WooCommerce’s email improvements feature is enabled, so the text you see may not match the default you find by reading one branch of the source. When declaring one of these options, include |
| Audience | Stock subject — and whether it survives review | |
|---|---|---|
|
customer |
"Your order from {site_title} is on its way!", under the heading "Good things are heading your way". Replace. Both are shipping metaphors and nothing is posted for an event entry. |
|
customer |
"Your {site_title} order has been received!" Fine as stock. |
|
customer |
Same wording as processing. For an event this usually means awaiting payment, so consider saying so rather than repeating "received". |
|
customer |
"Your order at {site_title} was unsuccessful". Fine. |
|
customer |
"Your {site_title} order #{order_number} has been refunded". Fine; note the stock heading ends in a dangling colon. |
|
customer |
Disabled by default. Decide whether an entrant who cancels should hear anything. |
|
customer |
"Details for order #{order_number} on {site_title}" — vague, and it is the email sent when requesting payment, so it is worth making that explicit. |
|
customer |
Stock wording is fine, but these are the ones nobody checks until a customer is stuck mid-signup. |
|
admin |
Internal. Prefixed |
|
both |
From the PDF Invoices plugin, not WooCommerce. In the normal flow the PDF rides along on the completed-order email instead, so these usually stay quiet. |
|
mixed |
Only relevant with point-of-sale enabled. Ignore otherwise. |
|
State |
|
Placeholders keep the copy reusable across sites: All 18 emails ship on WooCommerce defaults until something is declared, so "we never changed it" and "it says whatever WooCommerce decided" are the same state. Reviewing the customer-facing ones is part of onboarding, not a polish task. |
| System | What it sends, and what only it can do |
|---|---|
WooCommerce (the WordPress site) |
Order received, order complete, refunds, and the customer account emails. The only system that can attach the PDF invoice — the invoice is generated by a WordPress plugin from the WooCommerce order, so it rides on a WooCommerce email and cannot be sent from elsewhere. |
admin-service (the EMS pipeline) |
Templated order confirmations and the payment-reminder ladder, through the communication reactor. Richer templates and per-organisation branding, but no invoice attachment. |
Both can send a confirmation for the same purchase. That is a configuration choice per customer, not a conflict to design out. All three settings are legitimate:
-
WooCommerce only — the simplest arrangement, and the one that keeps the invoice.
-
admin-service only — a richer branded confirmation, but then nothing carries the PDF invoice, so this only suits a customer who does not need one.
-
Both — deliberately: a WooCommerce receipt carrying the invoice, plus an EMS confirmation covering entries, categories and event detail that WooCommerce knows nothing about.
|
Whatever is chosen, the branding has to agree across both systems. A customer who receives two emails about one purchase should not be able to tell they came from different software. At minimum the sender name, the sender address and the brand colour must match; the tone should too. The two are configured in completely different places — Note also that admin-service branding is currently global, not per organisation; per-organisation branding is planned but not yet available. Until it lands, a customer whose WooCommerce site is strongly branded will receive a generically branded EMS email alongside it. |
-
Decide which system owns the order confirmation for this customer: WooCommerce, admin-service, or both.
-
If the customer needs invoices, WooCommerce’s completed-order email stays enabled — that is what carries the PDF.
-
If both send, check the two do not contradict each other or repeat the same instruction twice.
-
Align sender name and sender address across both systems.
-
Align the brand colour across both systems.
-
Record the decision. Silence is not neutral: once the communication reactor is enabled for an organisation it starts sending, and a customer already receiving WooCommerce mail then quietly begins receiving both.
3.5. Payment gateway
PayGate PayWeb, the South African gateway. See PayGate PayWeb.
| Item | Detail |
|---|---|
Merchant account |
A PayGate merchant ID and key, obtained by the customer from PayGate. Test credentials first, live credentials at go-live. |
| Setting | Detail |
|---|---|
Merchant ID and key |
Entered in wp-admin, never in the manifest or a declared option. The gateway settings option carries the merchant key, which is why it is on the harvest denylist. |
Test mode |
On for every non-production site. A dev site refreshed from production inherits the live settings and must be scrubbed. |
3.6. EMS event payment integration
The first-party plugin that reports paid WooCommerce orders to admin-service and links a purchase to an event entry. See Event Payment Plugin.
| Setting | Notes |
|---|---|
|
Base URL of admin-service. No |
|
Registration portal URL for the same environment. |
|
Default WooCommerce product used for an entry. |
|
Where the customer is returned after payment. |
| Key | Notes |
|---|---|
|
Authenticates the site to admin-service. |
| Setting | Detail |
|---|---|
|
On a site behind basic authentication, the plugin’s inbound callback path must be exempted — a
machine caller has no credentials to offer and would get a 401. Paths that authenticate
themselves are exempted; |
3.7. Backups
UpdraftPlus Premium, on its own volume separate from uploads. See UpdraftPlus.
| Item | Detail |
|---|---|
Licence |
UpdraftPlus Premium is licensed per site. The Migrator add-on is licensed separately and does not consume a Premium site slot — a dev site activates Migrator only. |
Remote storage |
The destination account, connected once in wp-admin. |
| Setting | Notes |
|---|---|
|
Where backup reports are sent. Requires Mail above to be working, or the reports go nowhere. |
|
Backup cadence. Only the cadence is declared; the storage connection and licence are done once in wp-admin. |
|
Size of the backup volume. |
|
Never restore a database forward into production. UpdraftPlus' database component is all or nothing and would replace live orders and users. Forward pushes are uploads only. The safe direction is production to dev, followed by a scrub. |
3.8. Theme and branding
Divi, plus the site’s own branding. See Divi.
| Item | Detail |
|---|---|
Licence |
Divi is a licensed theme. The tarball is staged by hand into |
Brand assets |
Logo, colour palette, and any header imagery. Collect the colours as hex values — they are needed by the PDF invoice as well as the site. |
| Item | Detail |
|---|---|
|
Active theme name. |
Theme options and page layouts |
Set in wp-admin and the Divi builder. Content, not configuration — it travels through the content lane rather than the chart. |
3.9. Forms
Forminator, for entry and contact forms. See Forminator.
Form definitions are content and are built in wp-admin. The configuration that matters here is that form notifications depend on Mail above — a form that silently fails to notify is indistinguishable from one nobody filled in.
3.10. Security and access control
| Item | Detail |
|---|---|
Wordfence |
Application firewall and malware scanning. Activated on production; usually dropped from a dev site, where it only nags. |
Ingress basic authentication |
Applied to any non-production site so the public cannot reach it. The credentials live in a
|
|
Set by |
Read-only root filesystem |
Enforced in both postures. Every writable path is an explicit volume mount. |
3.11. Search engine indexing
| Item | Detail |
|---|---|
|
|
Yoast SEO |
Sitemaps and metadata for the production site. See Yoast SEO. |
3.12. Scheduled tasks
| Item | Detail |
|---|---|
|
|
|
A CronJob drives the scheduler out of band against the in-cluster Service instead. |
Why it matters |
This is not cosmetic and not production-only. With the scheduler disabled and no CronJob, nothing runs scheduled work and every event silently piles up overdue: UpdraftPlus resumes backups and restores through WP-Cron, and WooCommerce’s Action Scheduler runs the same way. |
4. Scoping summary
Use this table to record which components a customer gets and what is outstanding.
| Component | Required? | What the customer must provide |
|---|---|---|
Base site |
Always |
Domain name, site title, initial administrator contact. |
Always in practice |
Sending address and mailbox. If sending from their own domain: SES credentials, and SPF and DKIM records published. |
|
WooCommerce |
If selling |
Store address, currency, tax treatment, shipping arrangement. |
Payment gateway |
If selling |
PayGate merchant account — test credentials, then live. |
PDF Invoice |
Optional |
Vendor licence, registered entity name and address, company registration number, VAT number or confirmation that they are not registered, logo, brand colours. |
EMS event payment integration |
If entries are managed in EMS |
Nothing from the customer — environment URLs and an API key from us. |
Backups |
Always |
Licence, and a remote storage destination. |
Theme and branding |
Always |
Logo, brand colours, imagery. |
Forms |
Optional |
The fields each form must capture, and who is notified. |
Security |
Always |
Nothing — applied by default. |
5. Related pages
-
WordPress Hosting — the platform pattern these settings configure.
-
Dev Site & Promotion — how a change is discovered in a dev site and promoted into the declared configuration above.
-
SMTP Configuration — the same Exchange connector, as reached by the EMS Spring services.
-
Credential Inventory — where each credential’s value is stored.
-
Environments — hostnames, namespaces and schemas per environment.