# Your first course with EP Courses — LLM Prompt

> **How to use this file:** Paste the entire contents into Claude, ChatGPT, Gemini, or any LLM as your opening message. It gives the model the whole guide, so it can walk you through it, ask where you have got to, and help when something does not behave.
>
> *Source: [https://documentation.elmspark.com/guides/ep-courses-first-course/](https://documentation.elmspark.com/guides/ep-courses-first-course/)*

---

You are helping me with the following. Use this guide as your reference. Work through it with me, ask what I have already done, and help me troubleshoot. Where a step changes something on a live site, a domain, or a server, tell me what it will do and wait for me to confirm before we go on. If something here contradicts what I am actually seeing, say so rather than guessing.

**What this covers:** From an empty PageMotor site to a course a student can enrol in and finish: the two pages you need, categories, lessons in HTML, and video from YouTube or your own S3 bucket.

# Your first course with EP Courses

From an empty PageMotor site to a course a student can enrol in and finish. Two pages, one ten-minute test drive, then your own material.

**Before you start:** EP Courses uploaded and activated, plus your PageMotor admin login. EP Membership can stay switched off until you take real students (Step 9).

On activating, because it catches everyone once: there is no Activate button in PageMotor. Tick the box next to the plugin, press **Save Plugins**, done.

**The one idea that makes everything else obvious: courses are not pages.** Courses live in a catalogue inside the plugin, the way products live inside a shop.

The viewer page you create in Step 2 is a television set. Every course is a channel: one page, and the link someone clicks decides which course it shows.

So you never create a page per course, or per lesson. You create list pages and one viewer page, and the plugin writes every link between them itself.

▶ The shape of the whole job in 3 minutes 52 seconds, narrated, with captions. The nine steps below have every field.

**Read the narration instead**

**Courses are not pages.** They live in a catalogue inside the plugin, the way products live inside a shop. The viewer page you make is a television set and every course is a channel: one page, and the link someone clicks decides which course it shows. So you never make a page per course, and never one per lesson.

**Two pages.** One with the slug `course-viewer` holding `[ep-course-viewer]`, where every course is watched and every Enrol and Continue button points. One with the slug `courses` holding `[ep-courses]`, which renders every published course as a card. The plugin writes every link between them itself.

**Drive the sample first.** EP Courses planted a course called Getting Started the first time it ran. Enrol, click through all three lessons, watch the progress bar fill, then leave and come back: the button now reads Continue Learning and drops you at your next unfinished lesson.

**Two fields decide more than the rest.** Category is free text you invent, lowercase with hyphens, spelt identically on every course in that area, because the filtering later is an exact match. Access is the free-versus-paid switch, and everything stays Free while you build, because a Premium course reads Coming Soon and nobody can enrol.

**Lessons are plain HTML,** and four tags cover an entire course: a paragraph, a heading, a list, and bold. Writing the material is the work; wrapping it in tags is not, so hand your notes to Claude for that part.

**Protect the file, not just the page.** Enrolment gates the lesson, while the video link behind it can be copied, shared, and keeps working forever. EP Media Storage serves each one through a link that expires.

**One category per list page,** spelt to match the course exactly. The quote marks must be the plain straight kind, or the shortcode renders as text.

**Before real students arrive,** watching a lesson needs a login even on a free course. That is EP Membership’s department. Leave Welcome Email and Require Email Verification off until email delivery actually works, or new members wait for a link that never arrives.

## 1 Update EP Courses first

Open your site’s **Updates** screen and take EP Courses to **0.4.13** or later.

Two changes in that release matter here. The Category box now starts empty (older versions pre-filled an example that looked like a fixed list). And the free-versus-paid switch is now honestly labelled **Access**, not Level.

Not showing yet? Refresh the Updates screen once. Sites check the ElmsPark channel on a schedule, so a fresh release can take a little while to appear on its own.

Still nothing? Some older PageMotor versions only ask the update server at one moment: when **Save Plugins** is pressed. Open **Manage Plugins**, press **Save Plugins** without changing anything, then look at Updates again.

## 2 Create the course viewer page

Create one new page with the slug `course-viewer` and put this on it:

`[ep-course-viewer]`

This is the single page where *every* course is watched. Each course gets its own address, like `/course-viewer/?course=taiji-ruler`, but they are all this one page showing a different channel.

Every Enrol and Continue button the plugin renders points here. That is why EP Courses nags you in its settings until the page exists: without it, those buttons lead to a 404.

Prefer a different slug? Change **Course Viewer Page Slug** in the plugin’s settings, and keep the page’s slug matching it exactly.

## 3 Create the courses catalogue page

Create a second page with the slug `courses` and put this on it:

`[ep-courses]`

That one shortcode renders every published course as a card: title, outcome, lesson count, duration, a Free or Premium badge, and the right button for whoever is looking.

Keep this page even once you build fancier landing pages. A couple of the plugin’s own fallback links point to `/courses/` when someone reaches the viewer without picking a course.

## 4 Test-drive the sample course

EP Courses planted a sample course called **Getting Started** the first time it ran. It exists for this exact moment: seeing the machine work before you feed it your own material.

Logged in to your site, open `/courses/` and click **Enrol Free** on the Getting Started card. You land in the viewer. Click through all three lessons.

While you are in there, notice:

- The lesson list beside the content, with a tick on anything finished.
- **Mark as Complete** under each lesson, and the progress bar filling as you go.
- Leave and come back: the card’s button is now **Continue Learning**, and it drops you at your next unfinished lesson.
- The **Enrolments** tab in the plugin’s settings, now showing your numbers.

Enrolment and progress are tracked per student, and you just watched it happen. Keep the sample as a reference while you build; delete it whenever you are done with it.

## 5 Create your course

In the plugin’s settings, open **Manage Courses** and press **+ Add Course**. What each field actually does:

- **Title.** The course name. The slug fills itself in as you type, and becomes the course’s address in viewer links.
- **Description and Outcome.** The outcome is the line shown on the course card, so write it for a student deciding whether to enrol.
- **Category.** Free text, yours to invent: `taiji`, `qigong`, `watercolours`. Lowercase with hyphens, spelt identically on every course in that area. Step 8 filters on an exact match.
- **Access.** The free-versus-paid switch. Free: anyone with an account can enrol. Premium: the card says Coming Soon and nobody can enrol yet. Keep everything Free while you build.
- **Price and Currency.** Only meaningful for Premium courses. Ignore for now.
- **Duration.** Total minutes, shown on the card.
- **Status.** Published is visible in the catalogue. Draft is hidden, the polite state for a course mid-build.

## 6 Write the lessons, in plain HTML

On the course’s row, press **Lessons**, then **+ Add Lesson**.

The **Content (HTML)** box is exactly what it says: what you type is what the page renders. Tags are the formatting. Students only ever see the formatted result, never the tags.

Four tags cover an entire course:

```
<p>Each paragraph wrapped like this.</p>

<h3>A heading inside the lesson</h3>

<ul>
  <li>A list item</li>
  <li>Another one</li>
</ul>

<p>Something <strong>bold</strong> mid-sentence.</p>
```

The sample course’s lessons use exactly these. Open one whenever you want a crib sheet.

Sort Order controls the sequence. Duration shows in the viewer. A Draft lesson stays hidden while you work on it.

**Let Claude write the HTML.** Hand it your raw notes and ask: *“Turn this into lesson HTML: paragraphs in <p> tags, one <h3> per section, lists as <ul>.”*

Paste the result into the Content box and save. Writing course material is work; wrapping it in tags should not be.

## 7 Add video, including S3

Each lesson has a **Video Type** and a **Video URL**:

- **YouTube** or **Vimeo**: paste the video’s embed URL.
- **MP4**: paste a direct link to a video file, including one in your own Amazon S3 (or S3-compatible) bucket.

An MP4 lesson shows a normal player streaming straight from your bucket. The video never passes through your website.

**Selling the course? Protect the file, not just the page.** Enrolment gates the lesson page, but a plain bucket link can be copied, shared, and it keeps working for anyone, forever.

[EP Media Storage](https://documentation.elmspark.com/plugins/ep-media-storage/) serves each course video through a link that expires, two hours by default. A copied link is dead by the time it travels, and students notice nothing. Same licence tier as EP Courses, and you author lessons exactly as above.

## 8 Category pages for your course areas

The catalogue page from Step 3 shows everything. When your site has areas, give each area its own list page with a filtered copy of the same shortcode. A Taiji page carries:

`[ep-courses category="taiji"]`

That shows only courses whose Category box says `taiji`. A Qigong page does the same with `qigong`. One category per list page.

The category typed on each course must match the shortcode’s exactly, hyphens and all.

Landing pages that just point at your areas (a martial arts page linking to Taiji and Qigong, say) need no shortcode. Only pages that list courses carry one.

One typing note: the quote marks must be the plain straight kind, `"`. Word processors and forums curl them into typographic quotes the shortcode cannot read. Copying from the code boxes on this page is safe.

## 9 Before real students arrive

Watching a lesson requires a login, even on a free course, because progress is tracked per student.

Accounts, registration and login are [EP Membership](https://documentation.elmspark.com/plugins/ep-membership/)’s department. The Enrol button sends logged-out visitors to `/register/`, so that page needs to exist by launch day, set up per the Membership docs.

Two switches in Membership’s settings deserve a warning label: **Welcome Email** and **Require Email Verification**. Both send through your site’s own email plumbing. If that is not wired up yet, the emails silently go nowhere, and verification leaves new members waiting for a link that never arrives.

So leave both off until email delivery is set up. That is its own short job: [Set up reliable email with Mailgun](https://documentation.elmspark.com/guides/mailgun-email/).

Ready to charge for a course? That is done by gating access with EP Membership rather than by the Premium setting alone. The [EP Courses reference docs](https://documentation.elmspark.com/plugins/ep-courses/) cover the current state of paid access.

## Troubleshooting

Open these only if you hit them.

**The Updates screen never shows the new version**

On some older PageMotor versions, the site only asks the update server when **Save Plugins** is pressed, so refreshing the Updates screen changes nothing. Open **Manage Plugins**, press **Save Plugins** without changing anything, then check Updates again.

Still nothing after that? Post on the forum with your PageMotor version. An older core is the usual cause, and a direct download can tide you over.

**The catalogue page says “No courses available at the moment”**

Only **Published** courses appear, so check the course’s Status field first. If the page uses a category filter, check the spelling matches the course’s Category box exactly, hyphens and all.

**The Enrol button leads to a 404**

The viewer page from Step 2 is missing, or its slug does not match the **Course Viewer Page Slug** setting. Create the page, or make the two match, and the buttons come back to life.

**The course card says Coming Soon and the button does nothing**

That course’s **Access** is set to Premium. Premium courses cannot take enrolments yet, so set it to Free while you build.

**The shortcode is showing as plain text on the page**

Either a typo in the shortcode name, or curly quote marks around the category. Retype it by hand with straight quotes, or copy it from this page.

**My lesson renders as one solid block of text**

The lesson body is HTML, so line breaks alone do not make paragraphs. Wrap each paragraph in `<p>` tags as in Step 6, or ask Claude to do the wrapping.

**I changed the viewer page’s slug and every button broke**

The buttons are built from the **Course Viewer Page Slug** setting, so update the setting to the new slug (or rename the page back). The two must always match.

---

*Generated from the guide above. If something here looks wrong, the guide is the source of truth: https://documentation.elmspark.com/guides/ep-courses-first-course/*
