The Learning portal turns ellocharlie into an LMS. You build courses in the CRM; your customers log into a portal of your own, work through lessons, take exams, and earn certificates β and their progress shows up on their contact record next to their deals and tickets.
There are two halves, and they never mix:
Where | Who signs in | |
|---|---|---|
Authoring & insights | Inside the CRM, at | Your staff, with their normal ellocharlie login |
The learner portal | A public site at | Your customers, with a separate learner account |
Learners have their own accounts, their own sign-in, and their own session. They never see the CRM, other learners, or anything internal.
Before you start
Open LMS Courses from the top Nav (Support > LMS Courses).
You can Preview any course as a learner at any point, including while it's still a draft β nothing you do in preview is recorded. It's the fastest way to check your work.
Grab your portal link from Learning β Settings β Access β Portal link β it looks like
https://app.ellocharlie.com/learn/<your-slug>. That's the URL you give learners.Nothing is visible to learners until a course is published, so you can build in the open.
How the pieces fit together
Course ββ the thing a learner enrolls in, and gets a certificate for
ββ Module a chapter. Optional image, optional "must finish the previous one" lock,
β and optionally its own exam.
β ββ Lesson the content unit: a markdown body + an optional embedded video.
ββ Final exam optional. Passing it completes the course and issues the certificate.
Two more concepts sit alongside:
Audiences β reusable named groups (by person tag and/or company) that control which courses a learner can see. A course with no audience attached is visible to everyone.
Learners β a learner account is automatically linked to a CRM person. If the email already exists in your CRM, it links to that contact; if not, a new contact is created with status customer.
Worked example: building "Getting started with Acme Analytics"
This is the whole flow, start to finish β three modules, eight lessons, a gating module quiz, and a final exam.
Step 1 β Run the course wizard
From Learning, click New course. You get a five-step wizard (Course β Modules β Lessons β Exam β Review). Your progress is saved as a local draft, so you can close the tab and pick it up again β you'll see a "Draft restored" notice.
Step 1 of 5 Β· Course. Fill in the basics:
Field | Example |
|---|---|
Title |
|
URL slug |
|
Short description |
|
Long description | A couple of paragraphs, markdown supported. Shows on the course page. |
The short description is what learners read on the catalog card, so make it one sentence about what they'll be able to do afterwards. Every text field has a β¨ button β see AI write-assist below.
Step 2 of 5 Β· Modules. Add three:
Welcome and setupBuilding your first dashboardGoing further
Each module can take a description and an image URL (rendered as a thumbnail beside the module on the learner's course page). Two to five modules is the sweet spot.
Step 3 of 5 Β· Lessons. Add titles under each module β bodies come later:
Module | Lessons |
|---|---|
1 Β· Welcome and setup |
|
2 Β· Building your first dashboard |
|
3 Β· Going further |
|
Each lesson row also takes a slug, an optional video URL, and estimated minutes. A title is enough for now.
Step 4 of 5 Β· Exam. Turn on Include a final exam, set the passing score slider to 80%, and write two or three questions to start β each is a prompt, 2β6 options, and one correct answer. You can add the rest later in the full editor.
Step 5 of 5 Β· Review. Check the outline (3 modules Β· 8 lessons Β· final exam at 80%) and click create. The course is created as a draft β learners can't see it yet.
Step 2 β Write the lessons
You land in the course editor. It's a vertical tab layout with a history rail on the right:
Tab | What's there |
|---|---|
Course | Title, slug, short and long description, audiences, status, delete |
Modules | The module list β edit, delete, and Add module |
Lessons | Every lesson grouped by module, with Add lesson per module and thumbs-up/down counts once learners start voting |
Final exam | Turn the final exam on/off and set the course's default passing score |
Final exam questions | The question builder (only appears once the exam exists) |
Open Lessons β Connect a data source β Edit and fill in:
Body (Markdown) β the lesson content. Headings, lists, links, and fenced code blocks all work.
Video URL β paste a YouTube, Vimeo, or Loom link; the provider is detected on save and the video is embedded above the body.
Est. minutes β shown to learners so they can plan.
URL slug β lowercase letters, digits and dashes; unique within the module.
Repeat for the other seven. Lesson bodies are the one place where AI write-assist really earns its keep β see below.
Step 3 β Add a module quiz that locks the next module
Open Modules β Building your first dashboard β Edit, then its Exam tab. Create the exam, then set:
Passing score % β leave blank to inherit the course default (80%).
Max attempts β blank means unlimited.
Must pass to unlock next module β leave on so learners can't start Going further until they've passed. Turn it off if you want the quiz to be practice only.
Add questions the same way as the final exam. While you're on the module, the Require previous module switch does the same job without a quiz: learners must finish every lesson in the previous module before this one opens.
Step 4 β Finish the final exam
Back on the course, open Final exam questions and build out the rest. Per question:
Prompt β one clear question testing one concept.
Options β between 2 and 6, with one marked correct.
Explanation (optional) β shown to a learner after they answer wrong. Worth writing; it's the difference between a test and a teaching tool.
On Exam details you can also set a title, a description shown right before the learner starts, per-exam passing score and max attempts, and shuffle questions.
Step 5 β Decide who can see it
If this course is for everyone, skip this. If it's for one segment, on the Course tab pick one or more Audiences (create them under Learning β Settings β Audiences β each is a name plus a set of person tags and/or companies).
A course with no audience attached is visible to everybody, including signed-out visitors. A course with an audience is hidden from the catalog β and returns "not found" if someone guesses the URL β unless the signed-in learner's linked contact matches one of its audiences by company or tag. Because matching needs a signed-in learner, audience-restricted courses are always invisible to logged-out visitors.
Step 6 β Preview it before anyone else sees it
Click Preview in the course editor header. It opens the course in a new tab as a learner sees it β while it's still a draft, and without you needing a learner account.
You can walk the whole thing: read lessons, hit Mark complete, follow the Next chain from lesson to lesson to module exam, and take the final exam and get scored. An amber banner across the top reminds you it's a preview.
Nothing you do in preview is saved. No enrollment, no progress, no exam attempt, no certificate β and none of it touches your Learning report's numbers. Close the tab and the preview resets. That's what makes it safe to click around in a course you're mid-way through building.
A few things worth knowing:
Preview works on drafts, which is the whole point β you don't have to publish to see your work.
Locked modules still show as locked, but preview never blocks you, so you can jump straight to lesson 12 to check one paragraph.
Preview is also on every course card on the Learning page, so you don't have to open the editor first.
Only signed-in staff on your account can preview. If someone copies the preview link and opens it logged out, they get "not found" β a draft never leaks.
Five minutes here catches more than any amount of re-reading the editor.
Step 7 β Publish
On the Course tab, set Status to Published. The header picks up a View public page link. Your course is now on the catalog at /learn/<your-slug>/catalog.
Set it back to Draft to pull it, or Archived to retire it.
Reference: what each piece does
Course
Title Β· slug Β· short description (catalog card) Β· long description (markdown, course page) Β· hero image Β· status (draft / published / archived) Β· default passing score Β· audiences.
Module
Title Β· description Β· image URL Β· order Β· Require previous module Β· optional module exam.
Lesson
Title Β· slug Β· markdown body Β· video URL (YouTube / Vimeo / Loom) Β· estimated minutes Β· order.
About the slug. It fills in automatically from the lesson title ("Lesson 1" β lesson-1) and keeps following the title until you type in the slug field yourself β after that it's yours and won't change when you rename the lesson.
Slugs only need to be unique within a module, so a summary lesson in Module 1 and another in Module 2 are perfectly fine. If two lessons in the same module would clash, ellocharlie appends a number for you (summary, summary-2). You'll only see an error if you hand-type a slug that a sibling already uses β and it'll name the slug and module so you know exactly which one to change.
Preview
Available from the course editor header and from every card on the Learning page. Opens the course in a new tab exactly as a learner sees it, including drafts, and lets you walk lessons and take exams without saving anything. See Step 6.
Exams
There are two kinds, and you can use both in one course:
Final exam | Module exam | |
|---|---|---|
Where you turn it on | Course editor β Final exam tab | Module editor β Exam tab |
What passing does | Completes the course and issues the certificate | Optionally unlocks the next module |
Can it be optional? | It gates the certificate whenever it exists | Yes β turn off Must pass to unlock next module to make it a practice quiz |
Both support a passing score (blank inherits the course default), max attempts (blank = unlimited), shuffled questions, and multiple-choice questions with 2β6 options, one correct answer, and an optional explanation.
Only single-answer multiple choice is supported today β no true/false, multi-select, or free text.
How sequencing and locking actually work
By default every lesson is open β learners can roam.
A module locks when it turns on Require previous module, or when any earlier module has a gating exam.
When locked, the learner must have completed every lesson in every earlier module and passed every gating module exam before it opens.
After a learner marks a lesson complete, the button becomes a contextual Next β the next lesson, the next module, Take module exam, Take final exam, or Back to my learning, depending on where they are.
Course progress is a straight percentage of lessons completed. A course is complete at 100% of lessons and a passed final exam (if there is one). Completion never rolls backwards.
AI write-assist
The β¨ button next to a text field opens a small assistant that either drafts the field from scratch or improves what's there. It has quick chips (Improve, Shorter, Longer, More professional, Friendlier, and on lesson bodies Add an example, Expand with more detail, Add a summary at the end), you can type your own instruction, and it shows a before/after so you can Use this, Dismiss, or Try again.
Available on: course title, short and long description, module title and description, lesson title and body, exam title and description, question prompts, and answer explanations. It needs your Claude integration connected; without it the button reports that Claude isn't connected.
Controlling learner access
Everything here is under Learning β Settings.
Access tab
Sign-up mode:
Open β anyone with the portal link can create an account. Good for public product education.
Invite-only β a valid invite code is required to sign up. Good for paid training, cohorts, or internal teams. The portal hides its "Create account" CTA in this mode.
Require admin approval is an independent switch that works with either mode: new sign-ups are held as pending and cannot sign in until you approve them.
The tab also has your copyable Portal link.
Invite codes tab
Create codes with an optional description, max redemptions (blank = unlimited), and an expiry date. The table shows redemptions used, and codes can be deactivated or deleted.
Approvals tab
The queue of pending learners, with one-click approve or reject. The tab badge shows how many are waiting. Rejected learners can't sign in.
Audiences tab
Create named audiences from person tags and/or companies, then attach them to courses on the course editor's Course tab. A learner sees a restricted course when their linked contact is at one of the listed companies or carries one of the listed tags.
Embed tab
Optional Head HTML and Body HTML injected into the learner portal β for analytics, a chat widget loader, or similar.
Password resets
Learners handle their own: Forgot password? on the sign-in page emails a link that's valid for one hour and single-use. Resetting signs them out everywhere. There's no email verification and no 2FA for learners.
What the learner sees
Page | What happens there |
|---|---|
Portal home | Landing page with your logo and name |
Catalog | Published courses they're allowed to see. Signed in, each card shows an In progress bar or a green Completed badge |
Course page | Description, full module and lesson outline, and Enroll (sign-in required) |
My learning | Enrolled courses with progress |
Lesson | Video, markdown body, Mark complete β contextual Next, and a Was this lesson helpful? thumbs vote |
Exam | All questions on one page; the submit button tracks how many are answered. Score is immediate, and a failed attempt shows which questions were missed with the explanations. Retries allowed up to the limit |
Certificates | Appears in the nav only once they've earned one |
Learners can also switch the portal between light and dark; the choice is remembered on their device.
Certificates
A certificate is issued automatically when a learner passes the final exam, or completes every lesson in a course that has no final exam. One per learner per course, with a 12-character certificate number.
Each certificate has a public verification page at /learn/<your-slug>/certs/<certificate-number> β anyone with the number can confirm it's real, see the learner name, course, and issue date. It renders as an on-screen "Certificate of Completion"; PDF download isn't built yet.
Auto sign-in from the support widget
If you run the support widget, you can put a Learning card on its home screen: Settings β Help desk β Appearance β Learning. Turn on Show card, then pick the companies and/or tags it should appear for.
Matched visitors who click it land on your catalog already signed in β no password. The card stays hidden unless the visitor's email matches a CRM contact in your targeting, and it hides entirely when you have no published courses or no targeting configured.
Where learning shows up in the CRM
Person record β Learning panel β that contact's learner account, approval status, last sign-in, per-course progress with module-level detail, and certificates earned.
Company record β Learning panel β Started / Completed / Certified counts across everyone at that company, plus per-course and per-person rollups.
Course editor β History rail β an audit log of every change to that course (created, updated, published, modules and lessons added or removed) plus learner milestones like enrollments, completions, exam passes, and certificates.
Learning β Settings β History rail β the same idea for changes to portal settings, on the right of every settings tab.
Reports
Find it on the Reporting landing page as Learning Courses, or go straight to /reporting/learning. It has a date-range filter and:
Eight KPIs: published courses Β· active learners Β· new enrollments Β· completions Β· completion rate Β· average exam score Β· exam pass rate Β· certificates issued.
Enrollment and completion trend chart.
A sortable course leaderboard β click any row to drill in.
Top drop-off lessons β the lessons with the worst completion rates, which is usually where a course is broken.
Recent certificates, and an AI recap with wins, concerns, and recommendations.
The per-course drill-down adds average attempts to pass, average time to complete, a per-module breakdown, a lesson drop-off bar chart, and β when the course has a final exam β a question difficulty table flagging questions most learners get wrong.
Quick troubleshooting
Symptom | Cause |
|---|---|
A learner can't see a course | It's still a draft, or it has an audience their contact doesn't match. Audience-restricted courses are invisible until they sign in. Use Preview to confirm the course itself is fine. |
Preview says "not found" | You're signed out, or signed in to a different account than the one that owns the course. Preview only works for staff on the account the course belongs to. |
Two lessons ended up with the same slug | Only possible if you hand-typed one. Auto-filled slugs never clash β ellocharlie appends a number. The error names the slug and module. |
A learner can't sign in | Require admin approval is on and they're still in the Approvals queue β or they were rejected. |
A lesson says it's locked | An earlier module has Require previous module on, or a gating module exam they haven't passed. |
No certificate after finishing | The course has a final exam and they haven't passed it. Certificates are only issued on a pass, or at 100% of lessons when there's no final exam. |
The widget's Learning card never shows | No published courses, no companies/tags selected, or the visitor's email doesn't match a CRM contact in that targeting. |
The β¨ AI button errors | The Claude integration isn't connected in your account. |