Case study 05

Fixing a training portal's 26 system emails and restoring the survey link

Period
Jun 2026 – Oct 2026
Role
Owner of the email review, rewrite, sign-off, handover and release checks
Reading time
3 min read

Part of the training portal project in Moving a government training portal onto Moodle 5.0, now with 3,800+ users. This one covers the platform's email set.

I reviewed and rebuilt the 26 automated emails of a government training portal, brought back the link participants use to give session feedback, and got the new set live safely.

The situation

After the portal moved to a new LMS (learning management system): Software that runs online courses and training: who can see what, who has enrolled and who has finished.Glossary, fewer participants were completing the post-session survey. One reason: the old booking confirmation carried the survey link, and the new one didn't.

The new platform's email templates also needed work. Some fields mapped to the wrong data, some links were broken, and some layouts fell apart on phones. Participants had also asked for a simple way to add sessions to their calendar.

My role

I owned the email set from review to release. The partner owned the wording and signed it off. The vendor wired the templates into the platform. I reviewed, rewrote and tested, packaged the handover, and checked the release on live.

What I did

Reviewed every email against the spec

I went through all 26 emails word by word and logged 48 changes. I restored the survey link, added an add-to-calendar link with a small PHP helper, and switched greetings to the participant's first name, with a safe fallback when it's missing. The partner's rewrites went into one tracked-changes document, so sign-off happened in a single pass.

Made the handover hard to get wrong

I rendered every template with sample, long and missing data, across three template engines and at three screen widths, and fixed what broke. The handover was one folder of finished templates, a screenshot of every email, and short developer notes. The developers only had to copy the folder and map three variables.

Got the release moving

The emails were due in the same release as two tools still awaiting approval. With the director, I agreed a release that included the checked emails and kept the unapproved tools switched off. I tested that build on staging across three roles before giving the OK.

Checked live before anything reached users

Before the release, I checked the live site's background jobs and found about 3,200 old sign-in notifications waiting in the queue. Switching the jobs on as planned would have sent them all to real users. I flagged it in writing, with the steps to clear the queue first. None of those messages went out.

During the late-night deployment I redirected all live email to myself. The next day I checked about 200 live pages using five role accounts, and triggered every immediate email to confirm it arrived correctly. What I found became 10 tracked items.

Results

  • 26 emails reviewed, with 48 documented changes, signed off by the partner in one document.
  • The survey link restored, plus add-to-calendar links and first-name greetings.
  • All immediate emails (about 15) verified on live on 22 October 2026.
  • About 3,200 queued notifications kept from reaching users.
  • Scheduled reminder emails being proven on staging before they're switched on.

What I'd do differently

  • Write each email's trigger into the spec. Who receives it, what triggers it and when it sends should be agreed before anyone writes a template. Several triggers had to be clarified late.
  • Put queued messages on the go-live checklist. Checking scheduled tasks and the message queue should be a standard go-live step, not something found during release checks.

Tools and skills

  • Email: Moodle email templates (Mustache, HTML/CSS), responsive email layout, calendar (.ics) links
  • Delivery: tracked-changes sign-off, developer handover packs, staged release planning
  • Quality: render testing at several screen widths, release checks with role accounts on live
  • AI (artificial intelligence): Here, AI assistants such as Claude that help with drafting, scripts and checks.Glossary: an AI assistant (Claude) for render testing and drafting, with every result checked by me

What it looked like (recreated)

Before and after: session confirmation Recreated with invented data.

Before

From Training Portal

Subject Your session is booked

Greeting
Dear user,
Session
Session 12: Topic A
Date and time
Tuesday 14 May, 4:00pm
Video link
Join online (link)
Add to calendar
Missing
Survey link
Missing

After

From Training Portal

Subject Your session is booked

Greeting
Hi Learner, Added
Session
Session 12: Topic A
Date and time
Tuesday 14 May, 4:00pm
Video link
Join online (link)
Add to calendar
Add to calendar Added
Survey link
Tell us how it went Added
Email inventory. Recreated with invented data.
No.NameTriggerRecipientTimingSurvey linkCalendar linkStatus
E01Booking confirmedLearner books a sessionLearnerImmediateYesYesLive
E02Booking cancelledLearner cancelsLearnerImmediateNoNoLive
E03Session reminderTwo days beforeLearnerScheduledYesYesOn staging
E04Waitlist placeA place frees upLearnerImmediateNoYesLive
E05Attendance markedFacilitator marks attendanceLearnerImmediateYesNoLive
E06New enquiryForm submittedPartnerImmediateNoNoNot changed
Release checklist. Recreated with invented data.
StepWhatResult
1Redirect all live email to a test inboxDone
2Deploy the releaseDone
3Check background jobs and the message queueQueue cleared first
4Smoke-test pages with each role accountDone
5Trigger each immediate emailAll arrived
6Remove the redirectDone
7Log issues as numbered itemsLogged

Client, partner and vendor names, and some details, are left out. Any visuals are recreations with invented data.

Jump to a case study

Arrow keys move through the results.