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, argocd/wp-<site>-prod.yml in the cluster repository, under spec.source.helm.valuesObject.

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 existingSecret. Created out-of-band and never rendered by the chart.

Every credential, without exception. Reaches the container through envFrom, so a changed key only takes effect on the next pod start.

Declared option

bootstrap.options in the chart or manifest. Written into wp_options by the bootstrap init container.

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. scripts/harvest.sh drops any key matching key|secret|password|token|salt before writing to the chart, and that filter is a safety net, not a licence to rely on it.

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.

Table 1. Out-of-band prerequisites
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 letsencrypt-prod cluster issuer. Each host gets its own <host>-tls secret. No manual step beyond the DNS record.

Database

A dedicated schema and user on the shared MySQL server. Never an existing populated schema — a fresh wp core install against one is what left the archived wordpress-wpca-test deployment crashlooping for 45 days.

Image registry access

The christhonie-docker pull secret must exist in the target namespace.

Table 2. Manifest
Setting Notes

targetRevision

Published Helm chart version. Bumping it rolls the site — see the downtime note below.

image.tag

Image built by scripts/build-image.sh. Must be a production build (no --dev), or the site comes up with a writable plugin tree.

fullnameOverride

Must be unique per site. Two releases in one namespace with the same fullname collide on every resource they create.

existingSecret

Name of the Secret below.

env.WP_HOME / env.WP_SITEURL

The public origin, and that origin plus /wp. Bedrock serves core from /wp and the front end from /.

env.DB_HOST / DB_NAME / DB_USER / DB_PREFIX

Connection to the schema created above.

env.SITE_TITLE

Used for wp core install on first run.

env.WP_ENV

production. This is what makes DISALLOW_FILE_MODS block installs from wp-admin.

ingress.hosts

Canonical host first; each host gets its own certificate.

persistence.size / updraftSize

Uploads and backup volumes. Both carry helm.sh/resource-policy: keep, so they survive a chart uninstall.

Table 3. Secret
Key Notes

DB_PASSWORD

For the database user above.

AUTH_KEY, SECURE_AUTH_KEY, LOGGED_IN_KEY, NONCE_KEY, AUTH_SALT, SECURE_AUTH_SALT, LOGGED_IN_SALT, NONCE_SALT

The eight WordPress salts. Generate per site. Rotating them invalidates every session and cookie.

WP_ADMIN_USER, WP_ADMIN_PASSWORD, WP_ADMIN_EMAIL

The initial administrator, created on first install only.

Table 4. Declared options
Setting Notes

bootstrap.theme

Active theme. Harvested from the dev site, so a theme switch promotes like any other change.

bootstrap.plugins

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.

bootstrap.installOptions.timezone_string

Applied on first install only, then never touched. Africa/Johannesburg for South African events.

bootstrap.permalinkStructure

Applied on first install only. /%postname%/.

Deploying takes the live site down for one to three minutes. The Deployment is single-replica with strategy: Recreate, because the uploads and backup volumes are ReadWriteOnce — the old pod is terminated before the new one starts, and the new pod then runs the bootstrap init container before Apache serves. Agree a low-traffic window before bumping targetRevision or image.tag.

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

smtp

Any authenticated SMTP server, or an IP-allowlisted relay. The generic route and the default.

FLUENTMAIL_SMTP_PASSWORD in the Secret — unless the relay authenticates by source IP, in which case none.

outlook

Microsoft 365 via Graph, for our own corporate tenants.

FLUENTMAIL_OUTLOOK_CLIENT_ID / FLUENTMAIL_OUTLOOK_CLIENT_SECRET, plus a one-time OAuth consent in wp-admin. Not fully declarative: the refresh token lives in the database and does not survive a database rebuild.

ses

Amazon SES. For volume, and required when mail must originate from the customer’s own domain.

FLUENTMAIL_AWS_ACCESS_KEY_ID / FLUENTMAIL_AWS_SECRET_ACCESS_KEY.

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 [email protected] pass. That customer needs the ses route and must publish the SPF and DKIM records for their domain.

Table 5. Manifest
Setting Notes

mail.enabled

Defaults to true in the chart, so manifest silence enables mail. State it explicitly.

mail.provider

One of the three above.

mail.host / mail.port

smtp route only.

mail.auth

Whether to attempt SMTP authentication. See the warning below — this is not a "more secure when on" setting.

mail.encryption / mail.autoTls

encryption forces an immediate TLS handshake; autoTls upgrades opportunistically via STARTTLS. The Myriad connector uses encryption: "none" with autoTls: "yes".

mail.senderName / mail.senderEmail

The From identity. Must be a domain the relay will accept.

mail.forceFromEmail

"yes" pins the envelope to senderEmail rather than letting WooCommerce set its own. Required where the relay rejects a From it does not own.

mail.simulate

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.

mail.logEmails / mail.logRetentionDays

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.

myriadevents-co-za.mail.protection.outlook.com is the tenant’s inbound MX endpoint. Probed from inside the cluster it advertises STARTTLS and, after the upgrade, no AUTH capability at all — yet with no credentials offered it accepts MAIL FROM a tenant address, RCPT TO an address outside the tenant, and queues the message for delivery. Relay is granted by an Exchange Online connector that allowlists the cluster’s egress IP address.

So mail.auth is "no" for this route and no password is needed. Setting it to "yes" does not harden anything: PHPMailer treats SMTPAuth=true as a requirement, issues AUTH against a server that never offered it, and every send fails.

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.

Checklist
  • fluent-smtp present in bootstrap.pluginsan inactive plugin hooks nothing, and the site will fall through to the missing sendmail while 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 true return from wp_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.

Table 6. Out-of-band prerequisites
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 packages/ before the image build.

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.

Table 7. Manifest — supplier identity
Setting Notes

env.PDF_COMPANY_NAME

Trading name shown at the head of the invoice.

env.PDF_COMPANY_DETAILS

Address block. Newlines are converted to line breaks, so a multi-line value works.

env.PDF_REGISTERED_NAME

Registered legal entity name.

env.PDF_REGISTERED_ADDRESS

Registered address.

env.PDF_COMPANY_NUMBER

Company registration number.

env.PDF_TAX_NUMBER

VAT registration number. Omit entirely when the entity is not a registered VAT vendor.

env.PDF_START_NUMBER

First invoice number. Not optional — see the warning below.

env.PDF_PREFIX

Prefix on the rendered invoice number, for example tdw-{year}-. Accepts date tokens ({year}, {invoicedate}, and the rest), substituted from the invoice date — so a prefix carrying a year rolls over on its own instead of still claiming the old one next January.

env.PDF_FILENAME

Attachment filename, without the extension. Tokens: {{company}}, {{invoicenumber}}, {{ordernumber}}, {{invoicedate}}, {{month}}, {{mon}}, {{year}}.

Leaving PDF_START_NUMBER unset does not fall back to 1 — it produces a blank invoice number.

The plugin guards with isset( $settings['start_number'] ), and isset('') is TRUE in PHP. The empty string the plugin ships therefore satisfies the guard and overwrites its own $next_invoice = 1 default rather than falling through to it. Every invoice then renders with an empty INVOICE NO. field, and nothing in the UI reports a problem.

The invoice number is not the order number. It is a separate sequence: order 707 is invoice tdw-2026-1. The order number is printed on the document in its own field, so nothing is lost by keeping them apart — and keeping them apart is the point, because cancelled and failed orders never produce an invoice. Numbering from the order id would leave gaps in a sequence that is supposed to be gapless.

This also explains a filename that looks wrong: the default pdf_filename is {{company}}-{{invoicenumber}}, and {{invoicenumber}} falls back to the order id when the number is empty. A first invoice arriving as Company-Name-707.pdf is therefore two defects wearing one disguise — the wrong name template, and a blank number behind it.

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 invoice_title to Invoice, leave PDF_TAX_NUMBER unset, and clear vat_meta_keys so the VAT row is not rendered at all.

Myriad Events (Pty) Ltd is not a registered VAT vendor, which is why the Tour de Worcester site is configured exactly that way.

Table 8. Declared options — ems_pdf_invoice_settings
Setting Notes

invoice_title

Invoice or Tax Invoice, per the note above.

brand_colour

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.

brand_contrast_colour

Text drawn on the brand colour. Check it is legible in print, not just on screen.

text_colour, muted_colour, border_colour, panel_bg_colour, row_alt_bg_colour

Remaining palette. Left at defaults unless the brand demands otherwise.

logo_path

See the media note below.

logo_max_width_px / logo_max_height_px

Bounding box for the logo.

vat_meta_keys

Order-meta keys searched for the customer’s VAT number. Set to an empty string to remove the row.

field1_* / field2_*

Two custom order-meta slots — label plus the meta keys to resolve. Left at defaults they resolve empty and render nothing.

eft_enabled

Whether to print the EFT payment card. false for a site that takes payment only through an online gateway.

eft_bank_name, eft_account_name, eft_account_number, eft_branch_code, eft_heading, eft_reference_text

Bank details, required only when eft_enabled is true.

Table 9. Media
Asset Detail

Invoice logo

Upload through wp-admin Media, then set logo_path to its absolute filesystem path on the uploads volume, for example /var/www/html/web/app/uploads/2026/07/logo.png. The plugin checks the value with file_exists() and silently falls back to the vendor’s own logo handling if the path does not resolve — a URL will not work here. The uploads volume is the only writable place for an asset on an immutable image.

Checklist
  • Vendor zip staged in packages/ at the pinned version before the image build.

  • Both plugins in bootstrap.plugins, after woocommerce and in the right order.

  • Supplier identity collected and set; VAT number present or deliberately absent.

  • invoice_title matches the entity’s VAT status.

  • Logo uploaded and logo_path set 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.

Table 10. Declared options
Setting Notes

woocommerce_currency

ZAR for South African events.

woocommerce_store_address, woocommerce_store_city, woocommerce_store_postcode

The selling entity’s address. Customer-facing — WooCommerce renders it into the footer of every order email through {store_address}, so it must agree with the address on the invoice. Worth checking against the postcode: a city and a postcode from different towns is a mismatch nobody notices until a customer does.

woocommerce_currency_pos

Symbol placement, for example left_space.

woocommerce_default_country

Country and province as ZA:WC.

woocommerce_onboarding_profile

Set completed and skipped to suppress the setup wizard.

woocommerce_task_list_hidden, woocommerce_show_marketplace_suggestions

Suppress the marketing nags in wp-admin.

Table 11. 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 wp_options, so they fall outside the declared configuration and the config diff. Set in wp-admin and record that it was done.

Store pages

Shop, Cart, Checkout, My Account and Refund/Returns are created on first install. Confirm they resolve rather than assuming.

Table 12. Email appearance and copy
Setting Notes

woocommerce_email_base_color

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.

woocommerce_email_from_name, woocommerce_email_from_address

The visible From, and the address WooCommerce prints in "contact us at …". Distinct from the envelope sender, which FluentSMTP pins separately via mail.senderEmail — so a stale value here does not break delivery, it just tells the customer to reply somewhere nobody reads.

woocommerce_email_footer_text

The footer under every order email. Placeholders: {site_title}, {site_url}, {store_address}, {store_email}.

additional_content (inside each email’s own settings option)

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 additional_content, and it lives inside each email’s own settings option — woocommerce_customer_invoice_settings, woocommerce_customer_processing_order_settings, woocommerce_customer_completed_order_settings — not in woocommerce_email_footer_text.

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 enabled explicitly. The option replaces the stored array, and omitting enabled is how an email gets switched off by accident.

Table 13. Per-email subject and heading
Email Audience Stock subject — and whether it survives review

customer_completed_order

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_processing_order

customer

"Your {site_title} order has been received!" Fine as stock.

customer_on_hold_order

customer

Same wording as processing. For an event this usually means awaiting payment, so consider saying so rather than repeating "received".

customer_failed_order

customer

"Your order at {site_title} was unsuccessful". Fine.

customer_refunded_order

customer

"Your {site_title} order #{order_number} has been refunded". Fine; note the stock heading ends in a dangling colon.

customer_cancelled_order

customer

Disabled by default. Decide whether an entrant who cancels should hear anything.

customer_invoice

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_note, customer_reset_password, customer_new_account

customer

Stock wording is fine, but these are the ones nobody checks until a customer is stuck mid-signup.

new_order, cancelled_order, failed_order

admin

Internal. Prefixed [{site_title}], which is what makes them filterable in a shared mailbox — keep the prefix.

pdf_customer_invoice, pdf_admin_invoice

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.

customer_pos_*, admin_payment_gateway_enabled

mixed

Only relevant with point-of-sale enabled. Ignore otherwise.

State enabled whenever you declare one of these options. The option replaces the stored array wholesale, and WooCommerce reads enabled from it. Omit the key and the email is switched off — silently, with the only symptom being customers who stop receiving something they used to get.

Placeholders keep the copy reusable across sites: {site_title}, {site_url}, {order_number}, {order_date}. Prefer them to literal names.

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.

Table 14. Who sends the order confirmation
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 — woocommerce_email_* options on the WordPress site, and the EMS template and mail configuration for admin-service — so nothing keeps them in step automatically. Changing one is exactly the moment the other drifts.

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.

Checklist
  • 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.

Table 15. Out-of-band prerequisites
Item Detail

Merchant account

A PayGate merchant ID and key, obtained by the customer from PayGate. Test credentials first, live credentials at go-live.

Table 16. wp-admin
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.

Table 17. Manifest
Setting Notes

env.EPA_ADMIN_API_URL

Base URL of admin-service. No /api suffix — the plugin appends the path itself, so a suffix here yields /api/api/… and a 404. Must point at the environment matching the site: a dev or stage site pointing at production reports real orders against the live API.

env.EPA_ENTRY_PORTAL_URL

Registration portal URL for the same environment.

env.EPA_DEFAULT_PROD_ID

Default WooCommerce product used for an entry.

env.EPA_REDIRECT_URL

Where the customer is returned after payment.

Table 18. Secret
Key Notes

EPA_ADMIN_API_KEY

Authenticates the site to admin-service.

Table 19. Ingress
Setting Detail

ingress.unauthenticatedPaths

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; /wp-admin and /wp-login.php never are.

3.7. Backups

UpdraftPlus Premium, on its own volume separate from uploads. See UpdraftPlus.

Table 20. Out-of-band prerequisites
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.

Table 21. Manifest and declared options
Setting Notes

env.BACKUP_EMAIL

Where backup reports are sent. Requires Mail above to be working, or the reports go nowhere.

bootstrap.options.updraft_interval / updraft_interval_database

Backup cadence. Only the cadence is declared; the storage connection and licence are done once in wp-admin.

persistence.updraftSize

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.

Table 22. Out-of-band prerequisites
Item Detail

Licence

Divi is a licensed theme. The tarball is staged by hand into packages/ before the image build.

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.

Table 23. Configuration
Item Detail

bootstrap.theme

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 <release>-basicauth Secret referenced by the ingress annotations. Paths that authenticate themselves are exempted through ingress.unauthenticatedPaths.

DISALLOW_FILE_MODS

Set by WP_ENV: production. Blocks plugin and theme installation from wp-admin, which is what makes the production image immutable.

Read-only root filesystem

Enforced in both postures. Every writable path is an explicit volume mount.

3.11. Search engine indexing

Item Detail

env.WP_NOINDEX

"true" emits X-Robots-Tag: noindex, nofollow from Apache. Set on every non-production site — a crawlable clone of a live store is an SEO problem, and after a content refresh a data problem too. Deliberately not an nginx configuration snippet: those are disabled cluster-wide and an ingress carrying one is rejected outright.

Yoast SEO

Sitemaps and metadata for the production site. See Yoast SEO.

3.12. Scheduled tasks

Item Detail

env.DISABLE_WP_CRON

"true". WordPress' request-driven scheduler is turned off.

cron.enabled / cron.schedule

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.

Mail

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.