15 Minute Florist - Weekly Activity Report
WordPress plugin for theprofitableflorist.com: weekly Monday-morning email to LifterLMS group leaders with per-staff workshop activity in The 15 Minute Florist.
by Kivi Media · github.com/kivimedia/fmf-activity-report · website
Install
No release zip yet. The repository archive installs, but the folder name will carry the branch suffix and updates will not flow:
wp plugin install https://github.com/kivimedia/fmf-activity-report/archive/refs/heads/main.zipWordPress plugin for theprofitableflorist.com. Sends a weekly Monday-morning email to each LifterLMS Group leader summarising which staff watched which workshop in The 15 Minute Florist over the prior 7 days.
Built for Tim Huckabee. Promised on the 2026-05-07 Fathom call as "sales dynamite" - the missing accountability layer that makes shop owners feel the program is paying off.
What it does
- Iterates every LifterLMS Group attached to course 5685 (The 15 Minute Florist).
- Filters to groups with 2+ student members AND at least one leader.
- For each qualifying group, computes lesson completions in the prior week.
- Emails the leader an HTML report listing per-staff lesson activity, with a highlighted "no activity this week" sub-list to surface inactive staff.
- Idempotent: per-(group, week) sent log prevents double-sends.
- Each email contains a one-click HMAC-signed unsubscribe URL that pauses reports for that group only.
- Also emails Tim + office a program-wide weekly roll-up: everyone across all shops (owners AND staff) who watched anything last week, grouped by shop, most-active first, with a count of the shops that had no activity. Sent once per week alongside the per-shop reports; own idempotency key.
Architecture
fmf-activity-report.php- bootstrap, constants, hook registrationincludes/class-fmf-lifterlms-reader.php- data adapter (groups, members, completions)includes/class-fmf-report-builder.php- shapes raw data into per-group reportsincludes/class-fmf-mailer.php- renders + sends emails via wp_mail()includes/class-fmf-cron.php- weekly WP-Cron event + manual run entry pointincludes/class-fmf-admin.php- settings page + per-group toggles + send-testincludes/class-fmf-rest.php- REST endpoints (diagnose, run-weekly, unsub)templates/emails/weekly-report.php- HTML email templatetemplates/emails/program-rollup.php- program-wide roll-up email template (for Tim)templates/admin-page.php- admin UI
Deploy
python deploy-ftp.py
Reads creds from .fmf-deploy.env (gitignored). Bump FMF_VERSION in
fmf-activity-report.php before each deploy so cached CSS busts.
Activate (first deploy only)
curl -u "USER:APP_PASSWORD" \
-X POST "https://theprofitableflorist.com/wp-json/wp/v2/plugins/fmf-activity-report/fmf-activity-report" \
-H "Content-Type: application/json" -d '{"status":"active"}'
Verify
curl -u "USER:APP_PASSWORD" \
"https://theprofitableflorist.com/wp-json/fmf/v1/diagnose"
Returns LifterLMS state, group counts, qualifying-team count, lesson count, sample groups (with their leaders + member counts), and last-run summary.
External cron trigger
If WP-Cron is unreliable, hit the REST endpoint with the per-install token shown in the admin page footer:
curl -X POST 'https://theprofitableflorist.com/wp-json/fmf/v1/run-weekly' \
-H 'x-fmf-token: <token>'