feat: live class sessions, CE workflow, and docs (#683)

Adds live-class session scheduling on lessons (join link, date/time,
timezone) with automatic 24h and 1h reminder emails plus a calendar
invite (.ics), a time-change notification with an updated invite, a
teacher-authored welcome email and session invite on enrollment, and a
"Notify students" quiz nudge.

LMS gets an upcoming live-sessions card and Join buttons, plus a
reusable live-session card component (3 states) in @cio/ui with a
Storybook story. The sidebar content tree now reflects sequential
progression locking like the content list, and the course-completion
confetti regression is fixed.

Org-based emails no longer reference ClassroomIO by name. Docs add
live-class, welcome-email, and course-progression guides, expand the
certificates guide (design, signatures, corrected labels), move
plan-required callouts to the top, flatten how-to-guides to the docs
root with redirects, and add screenshots. Includes an add-docs-image
skill.
This commit is contained in:
Rotimi Best
2026-06-22 05:43:48 +01:00
committed by GitHub
parent 3547901de6
commit 81294a47f9
193 changed files with 5477 additions and 805 deletions
+27 -2
View File
@@ -19,7 +19,7 @@ const DEFAULT_META_TITLE =
'ClassroomIO Docs | Customer, Partner, and Employee Education';
const DEFAULT_META_DESCRIPTION =
'Learn how to create customer academies, partner certification programs, and employee training workflows in ClassroomIO.';
const DEFAULT_OG_IMAGE_URL = 'https://brand.cdn.clsrio.com/og/classroomio-opengraph.png';
const DEFAULT_OG_IMAGE_URL = 'https://brand.cdn.clsrio.com/og/classroomio-opengraph.jpg';
const DEFAULT_OG_IMAGE_ALT = 'ClassroomIO documentation for customer, partner, and employee education';
export const links: LinksFunction = () => [
@@ -60,7 +60,7 @@ export const meta: MetaFunction = () => [
},
{
property: 'og:image:type',
content: 'image/png'
content: 'image/jpeg'
},
{
property: 'og:image:width',
@@ -74,6 +74,31 @@ export const meta: MetaFunction = () => [
property: 'og:image:secure_url',
content: DEFAULT_OG_IMAGE_URL
},
// WebP fallback for better compression on supported platforms
{
property: 'og:image',
content: 'https://brand.cdn.clsrio.com/og/classroomio-opengraph.webp'
},
{
property: 'og:image:alt',
content: DEFAULT_OG_IMAGE_ALT
},
{
property: 'og:image:type',
content: 'image/webp'
},
{
property: 'og:image:width',
content: '1920'
},
{
property: 'og:image:height',
content: '1080'
},
{
property: 'og:image:secure_url',
content: 'https://brand.cdn.clsrio.com/og/classroomio-opengraph.webp'
},
{
name: 'twitter:card',
content: 'summary_large_image'
+8 -1
View File
@@ -2,7 +2,7 @@ import { useMemo } from 'react';
import type * as PageTree from 'fumadocs-core/page-tree';
import browserCollections from 'fumadocs-mdx:collections/browser';
import { isRouteErrorResponse, useLoaderData, useRouteError } from 'react-router';
import { isRouteErrorResponse, redirect, useLoaderData, useRouteError } from 'react-router';
import { DocsLayout } from 'fumadocs-ui/layouts/docs';
import { DocsBody, DocsDescription, DocsPage, DocsTitle } from 'fumadocs-ui/layouts/docs/page';
import { HomeLayout } from 'fumadocs-ui/layouts/home';
@@ -26,6 +26,13 @@ const clientLoader = browserCollections.docs.createClientLoader({
export async function loader({ params }: { params: Record<string, string | undefined> }) {
const slug = params['*'];
// How-to guides were flattened to the docs root; permanently redirect the old
// `.../how-to-guides/<page>` URLs to `.../<page>`.
if (slug && slug.includes('how-to-guides/')) {
throw redirect('/' + slug.replace('how-to-guides/', ''), 301);
}
const slugs = slug ? slug.split('/') : ['home'];
const { getDocsRouteData } = await import('@/lib/source.server');
const routeData = await getDocsRouteData(slugs);
+7 -7
View File
@@ -7,6 +7,10 @@ import { Callout } from 'fumadocs-ui/components/callout';
**Audience** is your org-wide student directory. It shows every person who belongs to your organization — whether they signed up themselves, accepted a course invite, or were added directly. From here you can search, sort, bulk-assign to courses, and manage pending invites.
<Callout type="info" title="Plan limits">
Your plan sets a maximum audience size. When you reach the limit, a banner appears and you cannot invite more students until you upgrade or remove existing members.
</Callout>
## What Audience shows
Audience is separate from course-level **People**. Course People shows who is enrolled in a specific course. Audience shows everyone in your organization regardless of which courses they have joined.
@@ -42,12 +46,8 @@ For students with **Pending** status, you can:
Use **Import Users** to bulk-add students from a CSV file. Use **Export** to download the current audience list.
<Callout type="info" title="Plan limits">
Your plan sets a maximum audience size. When you reach the limit, a banner appears and you cannot invite more students until you upgrade or remove existing members.
</Callout>
## Related guides
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — how students join courses
- [How to Invite Students](/docs/how-to-guides/invite-students) — send course-specific invites
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — difference between students and team members
- [How Course Enrollment Works](/docs/course-enrollment) — how students join courses
- [How to Invite Students](/docs/invite-students) — send course-specific invites
- [Roles and Permissions](/docs/roles-and-permissions) — difference between students and team members
+100
View File
@@ -0,0 +1,100 @@
---
title: How to Create Certificates
description: Configure certificate rules for a course, set completion requirements, and let students download their certificates.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
Certificates recognize students for completing a course. You configure the rules on a per-course basis — how much of the course must be completed, whether a final exercise must be passed, and when certificates expire. Students can then download their certificate from the **Certificates** tab in the LMS.
<Callout type="warn" title="Paid plan required">
Certificate features require a paid plan. The controls are visible on free plans but disabled.
</Callout>
## Configure certificate rules
Open your course in the admin dashboard and go to the **Certificates** tab.
![Certificate rules panel with the download toggle and completion threshold](/certificates-rules.webp)
<Steps>
<Step>
### Enable downloadable certificates
Turn on **Allow students download certificate**. When this is off, no certificate is generated even if students meet the requirements.
</Step>
<Step>
### Set a completion threshold
Enter a percentage in **Minimum completion (%)**. A student must complete this share of the course to qualify. Defaults to 100%.
</Step>
<Step>
### Require a final exercise (optional)
Select an exercise from **Final exercise (optional)**. When set, the student must pass that specific exercise (best attempt counts) in addition to meeting the overall completion percentage. Set **Minimum score on final exercise (%)** to the minimum passing score for that exercise.
</Step>
<Step>
### Set a deadline (optional)
Enter a date and time in **Certification deadline**. Students who complete the course after this date do not receive a certificate.
</Step>
<Step>
### Add a custom email message (optional)
Enter text in the email message field. This message is included in the notification email sent to students when they earn their certificate.
</Step>
</Steps>
## Customize the design and add signatures
Set up how the certificate looks before the course goes live, so the first student to qualify gets the finished
version. On the **Certificates** tab, click **Customize design** to open the certificate editor.
![Certificate design editor showing the template picker and live preview](/certificates-design-editor.webp)
<Steps>
<Step>
### Pick a template and accent color
Choose a **Template** and an accent color to match your brand. A live preview shows the result as you change it.
</Step>
<Step>
### Add signatories and signatures
Under **Signatories**, turn on **Show signatory 1** and fill in **Signatory 1 name** and **Signatory 1 role**, then
use **Signature image** to upload a signature graphic. You can enable a second signatory the same way.
![Signatories section with name, role, and signature image upload](/certificates-signatories.webp)
</Step>
<Step>
### Set the certificate ID format (optional)
Set a **Certificate ID format** so every issued certificate carries a unique, verifiable reference.
</Step>
</Steps>
<Callout type="info">
Finalize the design and signatures before you publish the course. Certificates are generated from the current design
when a student qualifies, so getting it right up front means no one receives an unfinished certificate.
</Callout>
## What students see
Once a student meets all the configured requirements, their certificate appears in the **Certificates** tab when they open the course in the LMS. They can view and download it from there.
![Student certificate view with download buttons](/certificates-student-download.webp)
## Related guides
- [Creating Your First Course](/docs/create-first-course) — course setup overview
- [How to Create an Exercise](/docs/create-exercise) — create the exercise you reference as a final exercise
- [How to Grade an Exercise](/docs/grade-exercise) — grade submissions before certificates are issued
- [Control Course Progression](/docs/course-progression): require completion before the certificate unlocks
- [Student Dashboard](/docs/student-dashboard) — where students access their certificates
+1 -1
View File
@@ -29,4 +29,4 @@ Admins can delete any question or comment. Authors can edit or delete their own
## Related guides
- [Course](/docs/course) — course-level features including Newsfeed
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — who can post and moderate
- [Roles and Permissions](/docs/roles-and-permissions) — who can post and moderate
@@ -54,7 +54,7 @@ From **People → Add people**, you enter one or more email addresses and Classr
When a student opens the link, they sign in (or sign up) and click **Join course**. ClassroomIO validates the token, expiry, and usage limit before enrolling them.
For step-by-step instructions, see [How to Invite Students](/docs/how-to-guides/invite-students).
For step-by-step instructions, see [How to Invite Students](/docs/invite-students).
<Callout type="info" title="Email invites work on closed or unpublished courses">
**Allow New Students** can be off and email invites still work. The toggle only blocks unsolicited self-enrollment from the landing page; it does not block people you explicitly invited. Invites also work on **unpublished** courses, so you can pre-enroll students before a course goes live.
@@ -83,7 +83,7 @@ Paid courses are useful when you want to prevent casual sign-ups on a free landi
| Goal | Suggested setup |
| --- | --- |
| Anyone can join | Free course, published, **Allow New Students** on |
| Only people you email invites to | **Allow New Students** off (optional), send [email invites](/docs/how-to-guides/invite-students) |
| Only people you email invites to | **Allow New Students** off (optional), send [email invites](/docs/invite-students) |
| Only people you add manually | **Allow New Students** off, use **People → Add people** to directly enroll existing students |
| Paywall + optional invites | Set a price, send invites to buyers who should skip or supplement checkout |
| Visible in catalog, enrollment closed | Published course, **Allow New Students** off, use invites or **People** to add members |
@@ -181,9 +181,10 @@ Enable **Disable Signup** and **Internal Enrollment Only** in **Settings → Aut
## Related guides
- [How to Invite Students](/docs/how-to-guides/invite-students) — create, send, and revoke course invite links
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — who can create courses and access the admin dashboard
- [How to Invite Students](/docs/invite-students) — create, send, and revoke course invite links
- [Customize the Welcome Email](/docs/welcome-email): the message students get when they enroll
- [Roles and Permissions](/docs/roles-and-permissions) — who can create courses and access the admin dashboard
- [Student Dashboard](/docs/student-dashboard) — Home, My Learning, Explore, and Programs
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) — org URLs used in enrollment links
- [Create a Course Landing Page](/docs/how-to-guides/course-landingpage) — pricing, publish state, and what prospects see before enrolling
- [Creating Your First Course](/docs/how-to-guides/create-first-course) — create and publish a course
- [Set Up a Custom Domain](/docs/custom-domain) — org URLs used in enrollment links
- [Create a Course Landing Page](/docs/course-landingpage) — pricing, publish state, and what prospects see before enrolling
- [Creating Your First Course](/docs/create-first-course) — create and publish a course
@@ -6,7 +6,7 @@ description: Build and edit a course landing page, including pricing, hero butto
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
A **course landing page** is the public page for one course. Prospects read the description, see pricing, and click **Enroll** if enrollment is open. This is separate from your [academy landing page](/docs/how-to-guides/org-landing-page), which is the academy homepage.
A **course landing page** is the public page for one course. Prospects read the description, see pricing, and click **Enroll** if enrollment is open. This is separate from your [academy landing page](/docs/org-landing-page), which is the academy homepage.
## Open the editor
@@ -47,7 +47,7 @@ Use the preview control next to **Save** to see the page. Confirm behavior on th
| **Instructors** | Instructor cards |
| **Footer** | Supporting links and copy |
Hero and pricing interact with [course enrollment](/docs/how-to-guides/course-enrollment): a free course with **Allow New Students** on shows an open **Enroll** button; paid or closed courses route visitors through payment or invites.
Hero and pricing interact with [course enrollment](/docs/course-enrollment): a free course with **Allow New Students** on shows an open **Enroll** button; paid or closed courses route visitors through payment or invites.
## Pricing and currency
@@ -72,11 +72,11 @@ Landing page content can be ready before you open enrollment:
| **Allow New Students** | Public **Enroll** works (for free courses) |
| **Price > 0** | Enrollment requires payment or a valid invite |
See [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) for closed cohorts and invite-only access.
See [How Course Enrollment Works](/docs/course-enrollment) for closed cohorts and invite-only access.
## Preview vs live site
The in-app preview shows layout and copy. Test **Enroll**, external links, and payment on your live academy URL (subdomain or [custom domain](/docs/how-to-guides/custom-domain)) before sharing publicly.
The in-app preview shows layout and copy. Test **Enroll**, external links, and payment on your live academy URL (subdomain or [custom domain](/docs/custom-domain)) before sharing publicly.
<Callout type="warn" title="Org landing page preview">
The org homepage preview in **Settings → Landing Page** disables link clicks. Course landing previews should still be checked on the live site for enrollment flows.
@@ -88,8 +88,8 @@ After a successful enroll, students land in the [Student Dashboard](/docs/studen
## Related guides
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — who can join and how Explore relates to publish settings
- [How to Invite Students](/docs/how-to-guides/invite-students) — invite links when public enroll is off
- [Course Types](/docs/how-to-guides/course-types) — how type affects public vs LMS access
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) — host for your landing page URL
- [Creating Your First Course](/docs/how-to-guides/create-first-course)
- [How Course Enrollment Works](/docs/course-enrollment) — who can join and how Explore relates to publish settings
- [How to Invite Students](/docs/invite-students) — invite links when public enroll is off
- [Course Types](/docs/course-types) — how type affects public vs LMS access
- [Set Up a Custom Domain](/docs/custom-domain) — host for your landing page URL
- [Creating Your First Course](/docs/create-first-course)
@@ -0,0 +1,103 @@
---
title: Control Course Progression
description: Require students to move through a course in order, with lessons and exercises that only complete when your rules are met.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
By default students can open any unlocked item in any order. With **sequential** progression they must finish each item
before the next one unlocks, and you decide what "finished" means for every lesson and exercise. This is the backbone of
a structured training flow: watch the video, pass the quiz, earn the certificate.
## Choose a progression mode
In the course's **Settings** tab, find the **Student progression** section and pick one:
| Mode | Behavior |
| --- | --- |
| **Free** | Students open any unlocked item in any order and mark lessons complete themselves. |
| **Sequential** | The next item stays locked until the current (or previous) item is complete. |
![Student progression setting with Free and Sequential options](/progression-mode.webp)
<Callout type="info">
If a course is just a video and a quiz, turn off **Content grouping** in the same settings so the content list is a
flat list instead of grouped sections.
</Callout>
## Set how a lesson completes
Open a lesson, go to its **Settings** tab, and choose a **Completion rule**:
| Rule | Completes when |
| --- | --- |
| **Manual** | The student clicks to mark the lesson complete. |
| **Video watch** | The student watches the selected videos. Set the **Watch threshold (%)** (for example 95%). |
| **None** | The lesson never blocks progression. |
![Lesson Completion rule options with Manual, Video watch, and None](/progression-completion-rule.webp)
<Callout type="warn">
**Video watch** only enforces uploaded videos. While the rule is active the player blocks skipping ahead and pauses when
the student switches tabs, so the watch percentage reflects real viewing. The lesson completes once the threshold is reached.
</Callout>
## Set how an exercise completes
Open an exercise, go to its **Settings** tab, and choose a **Completion rule**:
- **Submitted**: the exercise completes as soon as the student submits any answer.
- **Passed**: the exercise completes only when the student's score meets the **Pass threshold (%)** you set.
Use **Passed** when an exercise must be cleared before the course can continue or a certificate can be issued.
## Gate the certificate
In the course's **Certificates** settings, turn on certificate download and set **Minimum completion (%)** (for example
100%). The certificate unlocks only after the student completes that share of the course, which, under sequential
progression, means they have watched the videos and finished the exercises in order.
See [How to Create Certificates](/docs/certificates) for templates, signatures, and the certificate ID.
## What students see
<Steps>
<Step>
### Locked items
Under **Sequential** progression, the next item stays locked until the student completes the one before it. For example, a
quiz that follows a lesson stays locked until that lesson is complete. In the course content list a locked item is greyed
out with a lock icon and cannot be opened; it unlocks automatically once the previous required item is done. If a student
opens a not-yet-available item directly, they see a **Complete previous content first** notice.
![Locked exercise in the content list with a lock icon](/progression-locked.webp)
</Step>
<Step>
### A video they cannot skip
On a **Video watch** lesson, the progress percentage climbs as they watch. Trying to jump ahead shows a "you cannot skip
ahead" notice, and the video pauses if they leave the tab.
![Video player showing the "You cannot skip ahead on this video" notice](/progression-cant-skip.webp)
</Step>
<Step>
### Completion and the certificate
Reaching the watch threshold marks the lesson complete and unlocks the next item. After they finish the final
requirement, the course is complete and they can view and download their certificate.
![Course requirements complete modal showing congratulations and View certificate button](/progression-student-course-complete.webp)
</Step>
</Steps>
## Related guides
- [Course Types](/docs/course-types): Self-paced, Live class, Compliance, and Public
- [How to Create an Exercise](/docs/create-exercise): build the quiz that gates progression
- [How to Create Certificates](/docs/certificates): what students earn at the end
- [Run a Live Class](/docs/live-class): schedule live sessions alongside on-demand content
@@ -26,7 +26,8 @@ Use self-paced for standard training, onboarding content, and evergreen material
**Live class** adds instructor grading workflows. Admins and tutors see a **Marks** section in the course sidebar to review and grade student work.
Use live class when an instructor scores assignments and you need a dedicated grading view.
Use live class when an instructor scores assignments and you need a dedicated grading view. To schedule sessions with a
join link, automatic reminders, and a calendar invite, see [Run a Live Class](/docs/live-class).
## Compliance
@@ -68,6 +69,8 @@ Open the course sidebar after changing type to confirm the right tools are avail
## Related guides
- [Course](/docs/course) — course overview and admin areas
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — enrollment (not used for Public in the same way)
- [Run a Live Class](/docs/live-class): schedule sessions, reminders, and calendar invites
- [Control Course Progression](/docs/course-progression): sequential learning and completion rules
- [How Course Enrollment Works](/docs/course-enrollment) — enrollment (not used for Public in the same way)
- [Student Dashboard](/docs/student-dashboard) — student LMS views
- [Creating Your First Course](/docs/how-to-guides/create-first-course)
- [Creating Your First Course](/docs/create-first-course)
+9 -9
View File
@@ -5,7 +5,7 @@ description: Overview of courses in ClassroomIO — lifecycle, settings, admin a
import { Callout } from 'fumadocs-ui/components/callout';
A **course** in ClassroomIO is a container for lessons, exercises, people, and settings. Students enroll into a course to access its content in the LMS. This page summarizes how courses work for admins. For step-by-step setup, start with [Creating Your First Course](/docs/how-to-guides/create-first-course).
A **course** in ClassroomIO is a container for lessons, exercises, people, and settings. Students enroll into a course to access its content in the LMS. This page summarizes how courses work for admins. For step-by-step setup, start with [Creating Your First Course](/docs/create-first-course).
## Course lifecycle
@@ -15,7 +15,7 @@ A **course** in ClassroomIO is a container for lessons, exercises, people, and s
| **Published** | Live on your academy; visible in Explore and on the public landing page |
| **Deleted** | Soft-deleted; no longer appears anywhere in the app |
Publishing makes a course discoverable. Combine publish state with **Allow New Students**, price, and invites to control who can actually join. See [How Course Enrollment Works](/docs/how-to-guides/course-enrollment).
Publishing makes a course discoverable. Combine publish state with **Allow New Students**, price, and invites to control who can actually join. See [How Course Enrollment Works](/docs/course-enrollment).
## Key settings
@@ -27,7 +27,7 @@ Publishing makes a course discoverable. Combine publish state with **Allow New S
| **Course type** | Course **Settings** | Changes nav, compliance, and public access behavior |
<Callout type="info" title="Course type changes more than a label">
Self-paced, Live class, Compliance, and Public types change what admins and students see in the app. See [Course Types](/docs/how-to-guides/course-types) for when to use each.
Self-paced, Live class, Compliance, and Public types change what admins and students see in the app. See [Course Types](/docs/course-types) for when to use each.
</Callout>
## Admin areas inside a course
@@ -47,7 +47,7 @@ When you open a course from the **Courses** list, the sidebar gives you:
The **People** tab lists everyone in the course group. Members appear when they enroll or when you add them from **Add people**. Email-only invites show as **Pending** until the student signs in.
Enrollment paths (public, invite link, admin assignment, paid) are documented in [How Course Enrollment Works](/docs/how-to-guides/course-enrollment). For sending invites, see [How to Invite Students](/docs/how-to-guides/invite-students).
Enrollment paths (public, invite link, admin assignment, paid) are documented in [How Course Enrollment Works](/docs/course-enrollment). For sending invites, see [How to Invite Students](/docs/invite-students).
## What students see
@@ -55,10 +55,10 @@ After enrolling, students open the course from **Home** or **My Learning** in th
## Related guides
- [Creating Your First Course](/docs/how-to-guides/create-first-course)
- [Course Types](/docs/how-to-guides/course-types)
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment)
- [How to Invite Students](/docs/how-to-guides/invite-students)
- [Create a Course Landing Page](/docs/how-to-guides/course-landingpage)
- [Creating Your First Course](/docs/create-first-course)
- [Course Types](/docs/course-types)
- [How Course Enrollment Works](/docs/course-enrollment)
- [How to Invite Students](/docs/invite-students)
- [Create a Course Landing Page](/docs/course-landingpage)
- [Student Dashboard](/docs/student-dashboard)
@@ -3,9 +3,10 @@ title: How to Create an Exercise
description: Learn how to create exercises in ClassroomIO.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
In ClassroomIO, exercises are a great way to assess students' understanding through practice activities. Once you've [set up your organization](/docs/how-to-guides/customize-organization), [created a course](/docs/how-to-guides/create-first-course), and [added a lesson](/docs/how-to-guides/create-first-course#adding-lessons), you can start creating exercises. Follow the process below to create your first exercise.
In ClassroomIO, exercises are a great way to assess students' understanding through practice activities. Once you've [set up your organization](/docs/customize-organization), [created a course](/docs/create-first-course), and [added a lesson](/docs/create-first-course#adding-lessons), you can start creating exercises. Follow the process below to create your first exercise.
<Steps>
<Step>
@@ -105,3 +106,24 @@ You've successfully created your first exercise and it is now accessible to stud
</Step>
</Steps>
## Notify students about a quiz
When a quiz is ready, you can email every enrolled student a one-click link to take it. On the exercise page, open the
**⋯** menu at the top and choose **Notify students**.
![Exercise menu showing the Notify students option](/notify-students-menu.webp)
The send runs in the background. A progress indicator appears while emails go out, then confirms when it is done. You can
run it again at any time to nudge students who have not taken the quiz yet.
<Callout type="info">
Notifying students is handy after a live session: schedule the quiz, then send the notification so attendees know to
complete it. See [Run a Live Class](/docs/live-class).
</Callout>
## Related guides
- [How to Grade an Exercise](/docs/grade-exercise): review and score submissions
- [Control Course Progression](/docs/course-progression): require a passing score before the next item unlocks
- [How to Create Certificates](/docs/certificates): issue certificates on completion
@@ -61,7 +61,7 @@ Open your custom domain in a browser. Sign in, open a course landing page, and c
| Org site landing page and course catalog | Yes |
| Organization team invite (some flows) | May still use platform URL until fully aligned |
Course invites are documented in [How to Invite Students](/docs/how-to-guides/invite-students). Those links should point at your academy, not `app.classroomio.com`, when your domain is verified.
Course invites are documented in [How to Invite Students](/docs/invite-students). Those links should point at your academy, not `app.classroomio.com`, when your domain is verified.
## Email sender address
@@ -73,8 +73,8 @@ Students should sign in on your academy so sessions and redirects stay on your a
## Related guides
- [Customize Your Organization](/docs/how-to-guides/customize-organization) — org profile and default subdomain
- [Customize Your Academy Landing Page](/docs/how-to-guides/org-landing-page) — public homepage on your domain
- [How to Invite Students](/docs/how-to-guides/invite-students) — enrollment links on your academy
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — enrollment paths and org signup
- [Customize Your Organization](/docs/customize-organization) — org profile and default subdomain
- [Customize Your Academy Landing Page](/docs/org-landing-page) — public homepage on your domain
- [How to Invite Students](/docs/invite-students) — enrollment links on your academy
- [How Course Enrollment Works](/docs/course-enrollment) — enrollment paths and org signup
- [Organization](/docs/organization) — org settings overview
@@ -91,9 +91,9 @@ Click on Update Domain to save the changes.
</Step>
</Steps>
For full custom domain setup (DNS, verification, which links use your domain), see [Set Up a Custom Domain](/docs/how-to-guides/custom-domain).
For full custom domain setup (DNS, verification, which links use your domain), see [Set Up a Custom Domain](/docs/custom-domain).
For the public homepage (hero, nav, footer), see [Customize Your Academy Landing Page](/docs/how-to-guides/org-landing-page).
For the public homepage (hero, nav, footer), see [Customize Your Academy Landing Page](/docs/org-landing-page).
## Set Brand Color
@@ -102,6 +102,6 @@ We understand that every organization has a preferred color that suits their bra
## Related guides
- [Organization](/docs/organization) — org settings overview
- [Customize Your Academy Landing Page](/docs/how-to-guides/org-landing-page) — public homepage
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) — your own hostname
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — team access
- [Customize Your Academy Landing Page](/docs/org-landing-page) — public homepage
- [Set Up a Custom Domain](/docs/custom-domain) — your own hostname
- [Roles and Permissions](/docs/roles-and-permissions) — team access
@@ -66,6 +66,6 @@ Click **Grade with AI** inside the grading modal to get an AI-suggested score an
## Related guides
- [How to Create an Exercise](/docs/how-to-guides/create-exercise) — create and configure exercises
- [How to Create Certificates](/docs/how-to-guides/certificates) — certificates that depend on exercise scores
- [How to Create an Exercise](/docs/create-exercise) — create and configure exercises
- [How to Create Certificates](/docs/certificates) — certificates that depend on exercise scores
- [Course](/docs/course) — course overview including the Submissions tab
+1 -1
View File
@@ -5,7 +5,7 @@ description: Learn how to create customer academies, partner certification progr
<img
alt="ClassroomIO documentation for customer, partner, and employee education"
src="https://brand.cdn.clsrio.com/og/classroomio-opengraph.png"
src="https://brand.cdn.clsrio.com/og/classroomio-opengraph.jpg"
/>
Welcome to the ClassroomIO documentation—your comprehensive guide to streamlining training for everyone. Our all-in-one platform empowers bootcamps, educators, and businesses to manage training programs easily. Run multiple classes and cohorts from a single UI with our mobile-first application, ensuring students can access all published content from any device.
@@ -1,64 +0,0 @@
---
title: How to Create Certificates
description: Configure certificate rules for a course, set completion requirements, and let students download their certificates.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
Certificates recognize students for completing a course. You configure the rules on a per-course basis — what score is required, whether a final exercise must be passed, and when certificates expire. Students can then download their certificate from the **Certificates** tab in the LMS.
## Configure certificate rules
Open your course in the admin dashboard and go to the **Certificates** tab.
<Steps>
<Step>
### Enable downloadable certificates
Turn on **Allow students to download their certificate**. When this is off, no certificate is generated even if students meet the requirements.
</Step>
<Step>
### Set a completion threshold
Enter a percentage in **Minimum score to receive certificate**. A student must reach this overall course score to qualify. Defaults to 100%.
</Step>
<Step>
### Require a final exercise (optional)
Select an exercise from **Final exercise**. When set, the student must pass that specific exercise in addition to meeting the overall threshold. Set **Minimum exercise score** to the minimum passing score for that exercise.
</Step>
<Step>
### Set a deadline (optional)
Enter a date and time in **Certificate deadline**. Students who complete the course after this date do not receive a certificate.
</Step>
<Step>
### Add a custom email message (optional)
Enter text in the email message field. This message is included in the notification email sent to students when they earn their certificate.
</Step>
</Steps>
## What students see
Once a student meets all the configured requirements, their certificate appears in the **Certificates** tab when they open the course in the LMS. They can view and download it from there.
<Callout type="info" title="Issuing certificates manually">
Admins can also issue a certificate to a specific student manually using the **Issue Certificate** button at the top of the Certificates tab, regardless of whether the student met the automatic requirements.
</Callout>
<Callout type="warn" title="Paid plan required">
Certificate features require a paid plan. The controls are visible on free plans but disabled.
</Callout>
## Related guides
- [Creating Your First Course](/docs/how-to-guides/create-first-course) — course setup overview
- [How to Create an Exercise](/docs/how-to-guides/create-exercise) — create the exercise you reference as a final exercise
- [How to Grade an Exercise](/docs/how-to-guides/grade-exercise) — grade submissions before certificates are issued
- [Student Dashboard](/docs/student-dashboard) — where students access their certificates
@@ -1,17 +0,0 @@
{
"create-first-course": "Creating Your First Course",
"create-exercise": "How to Create an Exercise",
"customize-organization": "Customize Your Organization",
"course-landingpage": "Create a Course Landing Page",
"course-enrollment": "How Course Enrollment Works",
"course-types": "Course Types",
"certificates": "How to Create Certificates",
"grade-exercise": "How to Grade an Exercise",
"invite-students": "How to Invite Students",
"invite-team-member": "Inviting a Team Member",
"take-attendance": "How to Take Attendance",
"use-math-in-editor": "Use Math in the Editor",
"roles-and-permissions": "Roles and Permissions",
"org-landing-page": "Customize Your Academy Landing Page",
"custom-domain": "Set Up a Custom Domain"
}
@@ -7,7 +7,7 @@ import { Step, Steps } from 'fumadocs-ui/components/steps';
Course invitations in ClassroomIO let you add students to a course by sending them a secure enrollment link by email. Each invite is unique and can have its own expiry and usage limits.
For a full overview of enrollment paths (public enroll, invites, admin assignment, and paid access), see [How Course Enrollment Works](/docs/how-to-guides/course-enrollment).
For a full overview of enrollment paths (public enroll, invites, admin assignment, and paid access), see [How Course Enrollment Works](/docs/course-enrollment).
## How course invitations work
@@ -80,7 +80,7 @@ Revoking does not remove students who have already joined; it only invalidates t
## Related guides
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — enrollment paths, Allow New Students, and Explore visibility
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — who can manage courses vs learn in the LMS
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) — which host appears in invite links
- [How Course Enrollment Works](/docs/course-enrollment) — enrollment paths, Allow New Students, and Explore visibility
- [Roles and Permissions](/docs/roles-and-permissions) — who can manage courses vs learn in the LMS
- [Set Up a Custom Domain](/docs/custom-domain) — which host appears in invite links
- [Student Dashboard](/docs/student-dashboard) — where students land after joining
@@ -8,6 +8,10 @@ import { Step, Steps } from 'fumadocs-ui/components/steps';
Team members are people who help you run your organization — **Admins** have full access, **Tutors** can manage the courses they are assigned to. Both are different from students, who use the LMS and cannot access the admin dashboard.
<Callout type="warn" title="Paid plan required">
Email invites and link invites for team members require a paid plan.
</Callout>
To invite a team member, go to **Settings → Organization**, then click **Manage Team**.
## Invite by email
@@ -64,12 +68,8 @@ Toggle the link off to stop accepting new members through it. You can re-enable
</Step>
</Steps>
<Callout type="warn" title="Paid plan required">
Email invites and link invites for team members require a paid plan.
</Callout>
## Related guides
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — what admins and tutors can do
- [How to Invite Students](/docs/how-to-guides/invite-students) — invite students to a specific course (separate from team invites)
- [Roles and Permissions](/docs/roles-and-permissions) — what admins and tutors can do
- [How to Invite Students](/docs/invite-students) — invite students to a specific course (separate from team invites)
- [Organization](/docs/organization) — org settings overview
+112
View File
@@ -0,0 +1,112 @@
---
title: Run a Live Class
description: Schedule a live session on a Live class course, set the join link, time, and timezone, and let ClassroomIO remind students and send a calendar invite.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
A **Live class** course runs around scheduled sessions you host on your own video tool (Zoom, Google Meet, Teams).
ClassroomIO handles everything around the session: the join link, the schedule, automatic reminders, a calendar invite,
and a one-click way for students to join.
## Set the course type
Set the course type to **Live class** in the course's **Settings** tab. See [Course Types](/docs/course-types)
for what each type does.
## Schedule the session
Each session lives on a lesson. Create the lesson for what you'll run live, then open its **Settings** tab and fill in
the **Live session** section.
![Lesson Settings tab showing the Live session fields for join link, date and time, and timezone](/live-class-session-settings.webp)
<Steps>
<Step>
### Create a lesson to run live
Add a lesson to the course for the session you'll hold live (for example, the webinar topic). See
[Creating Your First Course](/docs/create-first-course#adding-lessons) for adding lessons.
</Step>
<Step>
### Add the join link
In **Join link (Zoom, Meet, etc.)**, paste the meeting URL students will use to join.
</Step>
<Step>
### Set the date and time
Pick the **Date and time** of the session.
</Step>
<Step>
### Choose the timezone
Set the **Timezone** for the session. Reminders and the calendar invite display the time in this timezone, so students
always see when the session starts in the zone you intend, regardless of where you or they are located.
</Step>
<Step>
### Save the session
Click **Save session**.
</Step>
</Steps>
## What students get
Once a session is scheduled, enrolled students automatically receive:
- **A calendar invite when they enroll.** The welcome email for a Live class course attaches a calendar invite (`.ics`)
for the next session, so students can add it to their calendar right away.
- **Reminder emails.** One about 24 hours before and one about 1 hour before the session, each with the join link. The
24-hour reminder also includes the calendar invite. Once added, the calendar reminds the student on its own.
- **A Join session button.** On their **LMS Home**, students see a **Join session** button on the course while a session
is upcoming, which opens the join link directly.
![LMS Home Live Sessions card with a Join session button](/live-class-lms-card.webp)
In the course content sidebar, a live-session lesson shows a red live (broadcast) icon, so you and your students can spot
it at a glance.
![Student live session card showing the countdown and Add to calendar button](/live-class-student-card.webp)
<Callout type="info">
Reminders are sent to enrolled students only. The times shown in emails and the calendar invite use the **Timezone** you
set on the session. The welcome email, reminders, and updates all reference the same calendar event, so students never
get a duplicate on their calendar.
</Callout>
## Change the session time
If you change the **Date and time**, **Join link**, or **Timezone** of a session that students are already enrolled in,
saving asks you to confirm with **Notify students of the change?**. Choosing **Save and notify** emails every enrolled
student about the update with a fresh calendar invite that updates the existing event on their calendar instead of
creating a duplicate.
![Confirmation dialog asking to notify students of the session change](/live-class-change-time.webp)
<Callout type="warn">
**Save and notify** emails all enrolled students. Use it when the time or link actually changed. For a first-time
schedule there is nothing to notify, so it saves without sending.
</Callout>
## After the session
Pair the session with a post-session quiz and a certificate to round out the workflow:
- Add a graded quiz with [How to Create an Exercise](/docs/create-exercise), then use **Notify students**
to send everyone a link to take it.
- Issue completion certificates with [How to Create Certificates](/docs/certificates).
## Related guides
- [Course Types](/docs/course-types): what Live class and the other types do
- [How to Create an Exercise](/docs/create-exercise): add a post-session quiz
- [How to Create Certificates](/docs/certificates): recognize completion
- [How Course Enrollment Works](/docs/course-enrollment): how students join the course
+31 -2
View File
@@ -18,8 +18,37 @@
"student-dashboard",
"enterprise-sso",
"---Guides---",
"how-to-guides",
"---Get started---",
"create-first-course",
"---Build a course---",
"course-types",
"create-exercise",
"grade-exercise",
"course-progression",
"use-math-in-editor",
"certificates",
"---Live classes---",
"live-class",
"take-attendance",
"---Enrollment & students---",
"course-enrollment",
"welcome-email",
"invite-students",
"---Publish your academy---",
"course-landingpage",
"org-landing-page",
"custom-domain",
"---Organization & team---",
"customize-organization",
"invite-team-member",
"roles-and-permissions",
"---Contributor guides---",
"contributor-guides"
]
}
@@ -8,7 +8,11 @@ import { Step, Steps } from 'fumadocs-ui/components/steps';
Your **academy landing page** is the public homepage for your academy (for example `https://ciodevs.myclassroomio.com` or your custom domain). Students and prospects see it before they sign in. This guide covers the editor in **Settings → Landing Page**.
For org profile and subdomain setup, see [Customize Your Organization](/docs/how-to-guides/customize-organization) and [Set Up a Custom Domain](/docs/how-to-guides/custom-domain).
For org profile and subdomain setup, see [Customize Your Organization](/docs/customize-organization) and [Set Up a Custom Domain](/docs/custom-domain).
<Callout type="warn" title="Paid plan required">
Some landing themes require a paid plan. If the customize option is locked, upgrade or pick a theme included in your plan.
</Callout>
## Open the landing page settings
@@ -46,7 +50,7 @@ The hero section supports a primary and optional secondary action.
| **Primary** (e.g. Get Started, Start Learning) | Often points to `/login` | Label and destination URL |
| **Secondary** (e.g. View Programs) | Optional second CTA | Label and destination URL |
Use your academy paths (for example `/login` or `/courses`) so visitors stay on your academy domain. After you verify a [custom domain](/docs/how-to-guides/custom-domain), test buttons on the live site, not only in preview.
Use your academy paths (for example `/login` or `/courses`) so visitors stay on your academy domain. After you verify a [custom domain](/docs/custom-domain), test buttons on the live site, not only in preview.
<Callout type="warn" title="Preview disables link clicks">
The thumbnail preview on the Landing Page settings screen renders with links disabled. Use **Open Academy** or open your live academy URL to test buttons like **Get Started** and **View Programs**.
@@ -58,7 +62,7 @@ The footer editor lets you set brand text, link columns, social links, and botto
## Themes
ClassroomIO ships multiple landing themes. Some themes require a paid plan. If customize is locked, upgrade or pick a theme included in your plan.
ClassroomIO ships multiple landing themes. Pick the one that fits your brand from the editor.
## Preview vs live site
@@ -71,7 +75,7 @@ Always validate hero and footer links on the live site before sharing the URL ex
## Related guides
- [Customize Your Organization](/docs/how-to-guides/customize-organization) — org name, logo, brand color
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) — use your own domain on the landing page
- [Create a Course Landing Page](/docs/how-to-guides/course-landingpage) — per-course public pages (separate from the org homepage)
- [Customize Your Organization](/docs/customize-organization) — org name, logo, brand color
- [Set Up a Custom Domain](/docs/custom-domain) — use your own domain on the landing page
- [Create a Course Landing Page](/docs/course-landingpage) — per-course public pages (separate from the org homepage)
- [Student Dashboard](/docs/student-dashboard) — where students go after signing in
+11 -11
View File
@@ -11,15 +11,15 @@ An **organization** in ClassroomIO holds courses, people, branding, and your aca
| Area | Where | Guide |
| --- | --- | --- |
| Name, logo, brand color | **Settings → Organization** | [Customize Your Organization](/docs/how-to-guides/customize-organization) |
| Public homepage | **Settings → Landing Page** | [Customize Your Academy Landing Page](/docs/how-to-guides/org-landing-page) |
| Custom domain | **Settings → Organization** | [Set Up a Custom Domain](/docs/how-to-guides/custom-domain) |
| Team roles | **Settings → Organization** | [Roles and Permissions](/docs/how-to-guides/roles-and-permissions), [Inviting a Team Member](/docs/how-to-guides/invite-team-member) |
| Signup rules, Internal Enrollment Only | **Settings → Authentication → General** | [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) (org access section) |
| Name, logo, brand color | **Settings → Organization** | [Customize Your Organization](/docs/customize-organization) |
| Public homepage | **Settings → Landing Page** | [Customize Your Academy Landing Page](/docs/org-landing-page) |
| Custom domain | **Settings → Organization** | [Set Up a Custom Domain](/docs/custom-domain) |
| Team roles | **Settings → Organization** | [Roles and Permissions](/docs/roles-and-permissions), [Inviting a Team Member](/docs/invite-team-member) |
| Signup rules, Internal Enrollment Only | **Settings → Authentication → General** | [How Course Enrollment Works](/docs/course-enrollment) (org access section) |
## Default URL
On creation, each org gets `https://<siteName>.myclassroomio.com` as its academy URL. You can connect a [custom domain](/docs/how-to-guides/custom-domain) so students use your own hostname.
On creation, each org gets `https://<siteName>.myclassroomio.com` as its academy URL. You can connect a [custom domain](/docs/custom-domain) so students use your own hostname.
<Callout type="info" title="Academy vs admin app">
Share your academy URL with students. The generic `app.classroomio.com` host is for platform access when no org subdomain applies. Course and enroll links should use your academy when possible.
@@ -33,10 +33,10 @@ On creation, each org gets `https://<siteName>.myclassroomio.com` as its academy
## Related guides
- [Customize Your Organization](/docs/how-to-guides/customize-organization)
- [Customize Your Academy Landing Page](/docs/how-to-guides/org-landing-page)
- [Set Up a Custom Domain](/docs/how-to-guides/custom-domain)
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions)
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment)
- [Customize Your Organization](/docs/customize-organization)
- [Customize Your Academy Landing Page](/docs/org-landing-page)
- [Set Up a Custom Domain](/docs/custom-domain)
- [Roles and Permissions](/docs/roles-and-permissions)
- [How Course Enrollment Works](/docs/course-enrollment)
- [Course](/docs/course)
- [Programs](/docs/programs)
+2 -2
View File
@@ -62,6 +62,6 @@ Students who belong to a program open **Programs** in the LMS to see their track
## Related guides
- [Student Dashboard](/docs/student-dashboard) — Programs vs My Learning vs Explore
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — how students join courses inside a program
- [How Course Enrollment Works](/docs/course-enrollment) — how students join courses inside a program
- [Course](/docs/course) — single-course overview
- [Roles and Permissions](/docs/how-to-guides/roles-and-permissions) — who can manage programs and courses
- [Roles and Permissions](/docs/roles-and-permissions) — who can manage programs and courses
+1 -1
View File
@@ -53,7 +53,7 @@ You are successfully signed up and ready to use ClassroomIO when you see the das
<Step>
### What Next?
After signing up successfully, you can now set up and [customize your Organization](/docs/how-to-guides/customize-organization).
After signing up successfully, you can now set up and [customize your Organization](/docs/customize-organization).
</Step>
</Steps>
@@ -18,7 +18,7 @@ ClassroomIO uses organization roles to control what each person can do. This gui
Admins have full control over organization settings, billing, domains, and all courses. Tutors can manage content for courses they are assigned to but cannot create new courses or change org-wide settings. Students use the [Student Dashboard](/docs/student-dashboard) to learn.
<Callout type="info" title="Per-person enroll or create toggles">
ClassroomIO does not support per-person flags like "this user can create courses but that user cannot." Access is set by role. To limit who joins a **course**, use course settings, invites, and **People** instead. See [How Course Enrollment Works](/docs/how-to-guides/course-enrollment).
ClassroomIO does not support per-person flags like "this user can create courses but that user cannot." Access is set by role. To limit who joins a **course**, use course settings, invites, and **People** instead. See [How Course Enrollment Works](/docs/course-enrollment).
</Callout>
## Who can create courses
@@ -38,7 +38,7 @@ Students sign in on your academy and land in the LMS. Admins and tutors can swit
## Inviting team members
To add Admins or Tutors, use [Inviting a Team Member](/docs/how-to-guides/invite-team-member). Team invites are separate from [student course invites](/docs/how-to-guides/invite-students).
To add Admins or Tutors, use [Inviting a Team Member](/docs/invite-team-member). Team invites are separate from [student course invites](/docs/invite-students).
## Organization signup vs course enrollment
@@ -55,8 +55,8 @@ Configure org signup under **Settings → Organization**. Configure per-course a
## Related guides
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — restrict who can join each course
- [How to Invite Students](/docs/how-to-guides/invite-students) — course enrollment links
- [Inviting a Team Member](/docs/how-to-guides/invite-team-member) — add admins and tutors
- [How Course Enrollment Works](/docs/course-enrollment) — restrict who can join each course
- [How to Invite Students](/docs/invite-students) — course enrollment links
- [Inviting a Team Member](/docs/invite-team-member) — add admins and tutors
- [Student Dashboard](/docs/student-dashboard) — what students see in the LMS
- [Organization](/docs/organization) — org settings overview
+4 -4
View File
@@ -43,7 +43,7 @@ Both show enrolled courses. My Learning adds clearer filtering for students mana
**Explore** lists **published, active courses** in your organization that the student has **not** enrolled in yet. Each card links to the course landing page so they can read details and enroll (if enrollment is open).
<Callout type="info" title="Explore is a catalog, not an enrollment gate">
A course can appear in Explore even when public self-enrollment is turned off. **Allow New Students** controls whether someone can join from the landing page, not whether the course is visible in Explore. To restrict who can join, see [How Course Enrollment Works](/docs/how-to-guides/course-enrollment).
A course can appear in Explore even when public self-enrollment is turned off. **Allow New Students** controls whether someone can join from the landing page, not whether the course is visible in Explore. To restrict who can join, see [How Course Enrollment Works](/docs/course-enrollment).
</Callout>
Explore is useful when you want students to discover optional or elective courses without assigning them manually.
@@ -82,7 +82,7 @@ If you added them from **People** but they have not signed in yet, they may show
## Related guides
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — how students join courses and what settings control access
- [How to Invite Students](/docs/how-to-guides/invite-students) — send enrollment links by email
- [How Course Enrollment Works](/docs/course-enrollment) — how students join courses and what settings control access
- [How to Invite Students](/docs/invite-students) — send enrollment links by email
- [Programs](/docs/programs) — multi-course tracks and goals for admins
- [Create a Course Landing Page](/docs/how-to-guides/course-landingpage) — what prospects see before enrolling
- [Create a Course Landing Page](/docs/course-landingpage) — what prospects see before enrolling
@@ -28,6 +28,6 @@ The table shows 10 students per page. Use the page controls at the bottom to mov
## Related guides
- [Creating Your First Course](/docs/how-to-guides/create-first-course) — adding lessons to a course
- [How Course Enrollment Works](/docs/how-to-guides/course-enrollment) — how students join a course
- [Creating Your First Course](/docs/create-first-course) — adding lessons to a course
- [How Course Enrollment Works](/docs/course-enrollment) — how students join a course
- [Course](/docs/course) — course overview and available tabs
+61
View File
@@ -0,0 +1,61 @@
---
title: Customize the Welcome Email
description: Write a custom message that students receive automatically when they enroll in a course.
---
import { Callout } from 'fumadocs-ui/components/callout';
import { Step, Steps } from 'fumadocs-ui/components/steps';
Every course can send a personalized welcome email when a student enrolls. Use it to greet students, share what to
expect, or include a link such as a live session URL.
## Write the welcome message
<Steps>
<Step>
### Open course settings
Go to the course's **Settings** tab and find the **Welcome email** section.
</Step>
<Step>
### Compose your message
Write your message in the rich-text editor. You can format text and add links, for example a welcome note plus your live
session join link.
</Step>
<Step>
### Save
Save the course settings. Your message is now used for new enrollments.
</Step>
</Steps>
![Course Settings Welcome email rich text editor](/welcome-email-editor.webp)
## How it sends
The welcome email goes out automatically whenever a student enrolls, whether they self-enroll, accept an invite, or are
added from the audience. Your message appears in the email above the standard "Sign in to the LMS" link.
<Callout type="info">
Leave the **Welcome email** blank to use ClassroomIO's default welcome message. Formatting is cleaned for safe email
delivery, so some advanced styling may be simplified.
</Callout>
## Live class courses: automatic session invite
For a **Live class** course with a scheduled session, the welcome email also attaches a calendar invite for the next
session, so students can add it to their calendar the moment they enroll. You do not set this up here; it is pulled from
the session you scheduled on the lesson. See [Run a Live Class](/docs/live-class).
![Rendered welcome email showing the Sign in to the LMS link and calendar invite attachment](/welcome-email-preview.webp)
## Related guides
- [How to Invite Students](/docs/invite-students): add students to a course
- [How Course Enrollment Works](/docs/course-enrollment): the enrollment flow
- [Run a Live Class](/docs/live-class): include your session link in the welcome message
Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 37 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 36 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 49 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 59 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

+6 -1
View File
@@ -10,7 +10,12 @@ export default defineConfig({
host: '127.0.0.1',
port: 3000
},
base: '/docs/',
base: '/docs',
ssr: {
optimizeDeps: {
include: ['fumadocs-ui/components/callout', 'fumadocs-ui/components/steps']
}
},
plugins: [
cloudflare({ viteEnvironment: { name: 'ssr' } }),
mdx(await import('./source.config')),