Flow Engine v1.0

Part of CloudWizard Email Suite

Flow Engine runs timed, multi-step email sequences — welcome series, onboarding drips, nurture flows — triggered either automatically when a subscriber confirms onto an Audience Manager list, or manually. A cron job checks every few minutes for enrollments due to receive their next step. It sends independently, with its own bundled mailer — Mail Engine is an optional enhancement, not a requirement.

Requirements

RequirementDetail
PHP8.1 or higher
MariaDB / MySQL5.7+ / 10.3+
Web serverNginx or Apache
Outgoing mailSMTP credentials configured in the controller's shared Settings
Cron accessA way to trigger a URL or run a PHP script every 5-15 minutes

Step 1 — Install the Controller

Flow Engine runs inside the CloudWizard Controller. The controller handles authentication, shared database config, and module detection. Install it first.

Upload the controller

Unzip the download. It holds one folder, CW/, with the controller and Flow Engine inside. Upload that whole folder to a directory on your server — typically public_html/CW/. The controller part looks like this:

public_html/CW/
  bootstrap.php
  config_path.php
  admin/
    index.php
    login.php
    logout.php
    settings.php
    setup.php
    style.css
    ...

Run the setup wizard

Visit https://yourdomain.com/CW/admin/setup.php to run the wizard. Fill in:

  • Database — host, name, username, password, table prefix (default: cw_)
  • SMTP — outgoing mail server credentials and sender address
  • Admin password — minimum 8 characters
  • Site URL — your public domain

Click Complete setup. The config file is written outside your webroot where possible.

Log in

You're redirected to the login page. Enter your admin password to reach the CloudWizard dashboard.

Controller ready. Continue to install Flow Engine.

Step 2 — Install Flow Engine

Upload the module

The module is already inside the zip you just uploaded, at CW/FlowEngine/. Adding it to an existing CloudWizard install instead? Don't upload the whole CW/ folder again: copy this module's FlowEngine/ folder into your existing controller directory, together with the short-URL files fo.php, fc.php, and u.php (if you don't already have it from another module), and the vendor/ folder if you do not already have CW/vendor/, then reload the dashboard. Its file layout:

public_html/CW/FlowEngine/
  module.php
  bootstrap.php
  cron.php
  click.php               ← public endpoint, click tracking
  track_open.php          ← public endpoint, open tracking
  admin/
    _bootstrap.php
    index.php              ← Overview
    flows.php              ← Flow list
    flow_edit.php           ← Create/edit a flow and its steps
    enrollments.php
    step_preview.php
    step_preview_post.php

Flow Engine sends via a shared PHPMailer library at CW/vendor/ — installed once with the controller, used by every module. No separate Flow Engine dependency to worry about.

Verify detection

Reload the controller dashboard. The Flow Engine card should show Open →.

Step 3 — Activate your license

Get your license key

Whether you purchase through cloudwizard.eu or via Gumroad, your license key is shown on the confirmation page and emailed to you. Format: XXXX-XXXX-XXXX.

Enter the key

In the controller go to Settings → License key, paste it, and click Save settings. The key is verified against the CloudWizard license server immediately.

License active. Continue to install Flow Engine.

Step 4 — Set up the cron job

Nothing sends without this. Flow Engine's cron.php checks for enrollments due their next step and enrolls newly-confirmed subscribers into signup-triggered flows. Open Flow Engine → Overview for the exact command generated for your install:

OptionWhen to use it
A — URL (wget)Works on any host with outbound HTTP access from cron; the URL includes a per-install secret key so it can't be triggered by anyone else
B — PHP (direct)Runs the script directly via the PHP CLI — no key needed, since reaching it this way already requires shell access to the server

Add it under Virtualmin → Scheduled Cron Jobs, running every 5-15 minutes — more frequent than that gains little, since step delays are rarely shorter.

If the Overview page shows no cron run yet, or a stale warning, the cron job isn't reaching the server — verify the exact command and that outbound requests aren't blocked.

Overview

Flow Engine → Overview is the landing page: active flows, active/completed/failed enrollment counts, total sent, cron status, and the cron setup block above.

Flows

Flow Engine → Flows lists every flow with its trigger type, step count, active/completed enrollment counts, and status. Click + New flow to create one:

FieldNotes
Flow nameInternal label
TriggerOn signup / list confirmation — enrolls automatically when a subscriber confirms onto the selected Audience Manager list; Manual enrollment — no automatic trigger
AM ListOnly shown if Audience Manager is installed. Leave as "any list" to trigger from any confirmed signup
StatusDraft, Active, or Paused — only Active flows process enrollments

Pause/Activate toggles a flow without deleting anything. Delete removes the flow along with every step and enrollment — this cannot be undone.

Steps & the step editor

Once a flow is saved, add steps with + Add step. Each step is one email in the sequence:

FieldNotes
DelayA number plus minutes/hours/days — time after the previous step (0 = send immediately on enrollment, for the first step)
TemplateOptional, and only available if Mail Engine is installed — merges the step into a Mail Engine template. Without Mail Engine, this field is replaced with a note and steps send as plain content
CTA buttonOptional. If the selected template contains a {{cta_url}} (or older [cta_url]) placeholder, fill these in to have a real button link to somewhere specific
Load AI draftOnly shown if AI Writer has generated drafts — pulls Subject/Preheader/Headline/Message from one
Subject / Preheader / HeadlineStandard fields, supports a {{first_name}} merge tag
MessageRich-text editor

When a template is selected, it's merged in using the same placeholders Mail Engine templates use: {{preheader}} {{headline}} {{message}} {{tracker}} {{unsubscribe}} {{sender_name}} {{cta_url}} {{cta_text}} — the older square-bracket form works too, for templates built before this naming existed.

Use the ↑/↓ arrows in the steps table to reorder — delays are always relative to the step before, so reordering changes actual send timing, not just display order.

Preview & test send

While editing an existing step, Preview → saves your current edits and opens a modal showing the step rendered with its template applied (if one is selected). Send test reveals a small inline form to send that exact step to one address immediately, using Flow Engine's own mailer — useful for checking how it actually looks in an inbox before it goes live in the sequence.

Enrollments

Click Subscribers on any flow in the Flows list to see everyone enrolled in it — their current step, status (active/completed/failed), and next scheduled send time.

Running without Mail Engine

Flow Engine ships its own copy of PHPMailer and sends every step independently — it does not require Mail Engine to be installed. The only thing Mail Engine adds is templates: without it, the Template field in the step editor is simply unavailable, and steps send as plain HTML with no template merge.

Install Mail Engine alongside Flow Engine if you want templated, on-brand emails with a consistent header/footer across your flows — it's a genuine enhancement, not a requirement.

Running without Audience Manager

Flow Engine runs standalone without Audience Manager too, with one real limit: since a signup-triggered flow is inherently about matching a confirmed list signup to a flow, that trigger type genuinely needs Audience Manager's subscriber/list data to work at all. Without Audience Manager:

Install Audience Manager alongside Flow Engine if you want automatic, signup-triggered sequences — a welcome series that starts the moment someone confirms, for example. Manually-enrolled flows work exactly the same either way.

Security

Troubleshooting

ErrorCauseFix
Enrollments never advance to the next step Cron isn't running, or isn't running often enough Check cron status on the Overview page; confirm the schedule matches your shortest step delay.
New signups aren't auto-enrolling Flow's trigger is set to Manual, its status isn't Active, or Audience Manager isn't installed Confirm trigger type, flow status, and that the subscriber actually confirmed (not just pending) on the matching list.
Template field missing in the step editor Mail Engine isn't installed — expected, see Running without Mail Engine Install Mail Engine if you want template support; otherwise steps send as plain content as designed.
Reordering steps changed send timing unexpectedly Delays are relative to the step before, not fixed dates Expected behavior — review each step's delay after reordering.
Test send or live send fails with an SMTP error SMTP misconfigured in the controller's shared settings Verify SMTP host/port/credentials under Settings.
Module not detected on dashboard module.php missing or not readable Confirm CW/FlowEngine/module.php exists. Restart PHP-FPM: systemctl restart php8.3-fpm
License key not accepted Wrong key format or server can't reach cloudwizard.eu Key format: XXXX-XXXX-XXXX. Check outbound HTTPS: curl -s https://cloudwizard.eu/license/ping.php
500 error on admin pages DB error, missing table, or file permissions tail -20 /home/yourusername/logs/php_log

CloudWizard Email Suite — Flow Engine v1.0
cloudwizard.eu — support@cloudwizard.eu