Event:lesson.completed· Destinations:HubSpotMailchimpSlackActiveCampaign
The problem
Course platforms rarely struggle to record that a lesson was completed. They struggle to make the rest of each instructor or creator stack react to that moment quickly and consistently. Every workspace wants the next lesson sequence, instructor alerts, and progress context in their own tools.
Without a delivery layer, teams stitch together per-customer CRM syncs, audience updates, Slack notifiers, and tag-based automation paths. Those branches drift fast — especially when progress-based workflows depend on module milestones instead of calendar timing and every workspace has its own rules.
Students who finish Module 3 should not get the same follow-up as students stuck on Module 1. Behavioral routing keeps each workspace aligned with what the learner actually did, not what day they signed up.
The event flow
Meshes receives the source event once, maps it to the right destinations per workspace, and keeps delivery visible when downstream APIs fail.
Event payload
lesson.completed{
"student_id": "stu_2048",
"email": "nina@academyflow.io",
"lesson_id": "lesson_customer-research",
"lesson_title": "Customer Research Fundamentals",
"module_id": "module_growth-foundations",
"module_title": "Growth Foundations",
"course_id": "course_creator-accelerator",
"completion_percentage": 62,
"time_spent_seconds": 1840,
"completed_at": "2026-03-21T14:18:00Z"
}Meshes updates lesson and progress properties using the workspace's HubSpot connection so segmentation stays aligned with the student record.
Students who reach the right milestone move into next-lesson or reminder paths inside each workspace without manual exports.
Meshes adds the student to the audience or list the workspace owner configured for next-lesson, reminder, or re-engagement sequences.
Email follow-up in each workspace is driven by actual course progress instead of a fixed calendar drip.
Meshes sends a progress alert to whichever channel the workspace connected, with course and module context.
Instructors and customer-education teams in each workspace can see momentum while it is happening.
Meshes applies a milestone tag in the workspace's ActiveCampaign connection tied to the module or completion threshold.
Behavior-driven automation inside each workspace can branch on the progress signal that matters most.
How Meshes handles it
Instead of maintaining separate workers, retry logic, and visibility per destination, Meshes gives you one event path, destination-aware routing, and built-in delivery guarantees.
From your product
lesson.completedenters Meshes onceimport MeshesEventsClient from '@mesheshq/events';
const meshes = new MeshesEventsClient(
process.env.WORKSPACE_PUBLISHABLE_KEY!,
);
await meshes.emit({
event: 'lesson.completed',
resource: 'course',
resource_id: 'creator-accelerator',
payload: {
student_id: 'stu_2048',
email: 'nina@academyflow.io',
lesson_id: 'lesson_customer-research',
lesson_title: 'Customer Research Fundamentals',
module_id: 'module_growth-foundations',
module_title: 'Growth Foundations',
course_id: 'course_creator-accelerator',
completion_percentage: 62,
time_spent_seconds: 1840,
completed_at: '2026-03-21T14:18:00Z',
},
});Across destinations
On every delivery
Why this matters
Students respond better to the next lesson, reminder, or encouragement when it is triggered by actual progress — no matter whose workspace they live in.
Course businesses need to know who is stalled, who is engaged, and who is moving fast. Progress-based routing keeps every workspace aligned with that reality.
Completion-driven workflows are easy to imagine and messy to maintain. Meshes gives every workspace the delivery layer those milestone automations depend on.
Related
Docs
See the fastest path from first event to routed delivery inside Meshes.
Open linkDocs
See how Meshes maps a single progress event to multiple downstream destinations per workspace.
Open linkIntegration
Keep progress-related properties and segmentation current inside each workspace's HubSpot.
Open linkIntegration
Push lesson-completion alerts straight into whichever channel each workspace watches.
Open linkBlog
See why behavior-driven routing works better than one-off integration branches.
Open linkUse Case
See a related pattern for onboarding steps and multi-stage activation flows.
Open linkCompare
Compare milestone routing with maintaining course-progress workers and queue logic yourself.
Open linklesson.completed through Meshes once and let each workspace's CRM, lifecycle email, instructor alerts, and milestone automation react from the same progress signal.