Aero LMS user guide
Aero turns your Shopify store into a training academy: you build courses in the Shopify admin, customers buy them like any product, study them on your storefront, and earn certificates anyone can verify. This guide walks through every feature.
Getting started
- Install the app. After OAuth you land on Courses — the home of everything you build.
- Create a course. Click + New course, give it a name. Add a module (a chapter), then lessons inside it.
- Add a quiz. Use + Add quiz on a module card for module quizzes, or the Assessments section for course-level finals. Graded quizzes gate the certificate; practice quizzes never affect results.
- Publish. Publish course (top right) creates an Active product on your Online Store channel at the price you set in the Pricing section. Your course is now purchasable.
- Try it as a customer. Buy it with a test gateway (on a dev store) or a real order, then open
/apps/courseson your storefront — the learner portal. Complete the lesson, pass the quiz, claim the certificate.
https://your-store.com/apps/courses. Add it to your storefront navigation so customers can find My courses — see the FAQ for the menu and order-status snippets.Pricing & selling
Each course maps to one Shopify product, created and kept in sync by Aero — title, description and image flow from the course editor on publish. You keep normal Shopify control: discounts, markets, sales channels, themes.
Linking a product you already have
The Pricing section of every course editor has a product link control: paste a product ID, product URL, or handle to connect the course to an existing product (Publish then updates that product instead of creating one), change the linked product any time, or unlink it so the next Publish creates a fresh one.
Team packs (Platinum)
In the course editor's Pricing section you can add team pack variants (e.g. 10 seats, 25 seats). When a business customer buys one, they get a seat license instead of a personal enrollment, and /apps/courses/team becomes their compliance dashboard. A quantity threshold in Settings → Business purchases can also turn bulk buys of the ordinary product into team licenses.
Bundles
Sell several courses as one product. On the Courses page, open Bundles → + New bundle: name it, tick at least two courses, set a price — Aero creates a published product for you — or point the bundle at a product you already sell. When a customer buys the bundle product, they're enrolled in every course in it; each course keeps its own progress, quizzes and certificate.
Subscriptions & memberships
Two recurring models, both billed by Shopify Checkout — Aero never touches card data:
Per-course subscription
In the course editor's Pricing section, the Recurring price card adds a monthly or yearly subscription option next to the one-time price. Buyers choose on the product page; team packs are deliberately excluded from the subscription option. Access to the course lasts while the subscription is active.
Memberships
Memberships (left nav) sells recurring access to a course menu: the whole catalog, or a set you pick. A membership is an entitlement, not an auto-enrollment — members visit the learner portal and enroll themselves, free, in courses from the menu. Buying a membership never enrolls anyone by itself, and publishing a new course never emails members: you announce new content on your own schedule.
Each membership can carry limits, editable any time and applied immediately:
| Limit | Meaning |
|---|---|
| Max free enrollments per month | How many courses a member can enroll in per calendar month. Blank = unlimited. |
| Max active courses at a time | How many membership-enrolled courses can be active at once. Blank = unlimited. |
Creating a membership makes a subscription-only product (it can't be bought one-off) with the selling plan attached, published to your Online Store.
Keeping a course out of the catalog
Every course editor has an Exclude from all-catalog memberships checkbox (Pricing section, off by default). Tick it on premium courses you don't want whole-catalog members to get for free. A membership that lists the course explicitly still includes it — an explicit pick is your choice.
What members see
The learner portal grows two cards. Included with your membership lists the courses they can enroll in, with their remaining quota ("3 of 5 free enrollments left this month"). Your subscriptions shows every subscription with its status, renewal date, an auto-renewal toggle, cancel, and update payment method (Shopify emails them a secure link). No support tickets needed for any of it.
Bundles vs memberships
A bundle is a one-time purchase that immediately enrolls the buyer in every course in it. A membership is recurring and lets members choose. Sell both — they answer different customers.
Modules & lessons
Courses are modules containing lessons. Drag to reorder either. Lesson types: Text (rich text with images), Video, Audio, PDF (all three uploaded to Aero's storage — no theme file limits), and SCORM (Gold+).
Mark a module Free preview to let anyone — including non-buyers — sample it; locked content shows a buy prompt. It's the best conversion tool in the app.
Quizzes
Question types: multiple choice, multiple select, true/false, fill-in-the-blank, and essay (manually graded). Each quiz has a pass mark (default 70%), an optional time limit, and can be graded or practice. Every graded quiz must be passed before the certificate is issued.
SCORM (Gold+)
Add a SCORM lesson and upload a zip exported from Articulate Storyline, Rise 360, iSpring, Captivate or similar (SCORM 1.2 / 2004). Aero unpacks, hosts and tracks it — completions and scores flow into normal progress.
Live sessions — Zoom (Gold+)
Add a Live session lesson, pick a date, time, duration and timezone — Aero creates the Zoom meeting, shows enrolled learners a countdown card with a Join the session button, and emails everyone the invitation. Change the time and it reschedules the meeting and emails everyone again (the wording is editable in Email templates → Live session).
Connecting Zoom (one time, ~5 minutes)
- Sign in at marketplace.zoom.us → Develop → Build App → Server-to-Server OAuth.
- Name it (e.g. “Aero LMS”), then under Scopes add the meeting scopes:
meeting:write:meeting,meeting:read:meeting,user:read:user(Zoom may label them “View and manage meetings”). - Activate the app, then copy the Account ID, Client ID and Client Secret from its credentials page.
- Paste all three into Aero → Settings → Integrations → Zoom, save, and hit Test connection.
Drip & progression
Drip (Bronze+) releases a lesson N days after enrollment. Progression rules (Gold+) lock lessons until earlier ones are complete, so learners move in order.
Selling in multiple languages
Each language is its own course with its own product — the model compliance sellers actually use (SCORM packages are per-language by nature), so quizzes, progress and certificates stay clean per language. Aero ties everything together:
- Course language & translations (course editor → Language & translations): tag the course's language, then either Duplicate as translation — copies every module, lesson and quiz into a new draft ready to translate — or link an existing course as a sibling. Learners see "Also available in: Français" links on the course page, and their My Courses page grows language filters when they hold courses in several languages. Access: by default, buying any translation unlocks all of them — a learner who bought the English course can switch to the French one and is enrolled automatically, free (subscription-bound access pauses together). Prefer to sell each language separately? Enable "Do not auto enrol to all available translations of the same course" in Settings → Course pages: switching then links to the other language's product page until it's purchased.
- Portal & player in the learner's language (Settings → Text & translations): add a language and translate any of the portal strings — quiz buttons and result messages included. Learners get their language automatically (from their browser, their checkout language, or a partner's API call) and can switch with the 🌐 selector; the choice sticks to their profile.
- Emails in the learner's language (Settings → Email templates): once a language exists in Text & translations, a language picker appears in the templates editor — write the French enrollment or certificate email and learners whose language is French get it. Untranslated templates fall back to your default wording. The learner's language is captured automatically from their order at purchase.
- Storefront side: product titles and descriptions translate with Shopify's own Translate & Adapt — nothing extra needed from Aero.
Certificates
Design once in the Certificate tab: background image, positioned text fields (each with its own font and size, and a maximum area so long titles shrink instead of overflowing), your logos and signatures, and awarding-body logos anchored left, right or balanced. The preview is pt-exact — what you see is the PDF.
When a learner completes a course they enter their name once to claim the certificate. The name is then locked onto it — nobody can rename a certificate after the fact. Validity in months is set per course; expiring certificates trigger reminder emails (Platinum) and show on the compliance dashboards.
Reissuing
From the course's Learners list (or the team dashboard for B2B managers), Reissue voids the old code and PDF and issues fresh ones — issue and expiry dates never change. Use it for typos or compromised codes.
Verification
Every certificate carries an ID like 9F3A-0B2C…, a QR code, and a public verify page at /apps/courses/verify?code=…. Employers scan or type the code and see holder, course, dates and validity — no account needed.
Learners
People lists everyone across courses with progress and certificates. Each course's editor has a Learners section: the roster with progress and certificate status, Remove (ends access immediately; history and earned certificates stay valid; a repurchase restores access) and Reissue.
Enroll people without a purchase by pasting emails into the enroll box — missing Shopify customers are created automatically and welcomed by email.
Teams & compliance (Platinum)
When a company buys a team pack, the buyer manages seats at /apps/courses/team: invite by link or email, assign teammates directly, build groups, nudge stragglers, download certificates, keep shared documents in the vault, and export a board-ready audit pack. The dashboard tracks a compliance target you set (Settings → Business purchases) with live donuts, deadlines and an attention queue.
Resellers — sell through partners (Platinum)
A reseller is a partner who sells your courses on their own platform — their storefront, their LMS, their branding — while the course itself always plays in Aero's hosted player. You keep the content; they bring the audience.
Setting one up (Teams page): every seat purchase creates a team automatically, or create one manually for a partner starting without seats. Flip Make reseller on the team — their manager then finds an API access section on the team dashboard where they create and revoke their own tokens (several at once, one per integration), and their developers integrate against the Partner API: three calls to list your catalog, send a learner into a course, and read progress back. Disabling the reseller revokes every token instantly.
How you get paid: resellers can prepay seats (grant them from the team's edit panel, or let them buy team packs on your storefront) and go pay-as-you-go beyond that — every PAYG enrollment is metered at your price. Set the store-wide PAYG price and volume seat tiers in the Reseller pricing card on the Teams page; override the PAYG price for an individual course from that course's editor (Reseller pricing card). Each reseller's Statement button shows the month's per-course usage and the amount due — that's your invoice source, and the reseller sees the same numbers over the API, so month-end holds no surprises.
Branding & certificates: the learner experience runs on courseplayer.aeroapp.org — or on courseplayer.yourdomain.com: add one CNAME record (courseplayer → courseplayer.aeroapp.org), email us to activate it, then set it as the team's custom player domain. The player can be embedded in the reseller's site via iframe, locked to domains you register per reseller. By default Aero does not issue certificates for reseller learners — partners certify under their own brand from the progress data. Enable Issue certificates on a reseller to have Aero issue them instead, stamped with "In partnership with" and the partner's logo — your direct customers' certificates are never affected.
Emails & SMTP
Aero sends enrollment welcomes, certificate congratulations, expiry reminders (Platinum), manager nudges, team invites — and can notify you on every completion (Settings → Automated emails → Notify me on completion).
Every template is editable in Settings → Email templates with a rich-text editor, an HTML source view, live placeholders like {first_name} and {course}, and a send test button. All messages ship inside Aero's branded layout with your store name.
SMTP (Platinum): connect your own mailbox (host, port, username, app password) in Settings → Email delivery and everything sends from your address. Without it, Aero's built-in sender delivers as “Your Store via Aero”.
Branding
Settings → Portal branding: upload your logo (replaces the Aero mark on the team dashboard sidebar) and repaint the five color tokens — sidebar, text, background, accent, highlight. Custom code (Gold+) injects your CSS/JS on every portal page. Terminology renames “employees” to whatever fits. Text & translations lets you rewrite or translate every learner-facing string.
Completion page & instructors
In a course's Completion & instructor card: write the message learners see after finishing, add a button (label + link — point it at your next course), and set the instructor (name, title, bio, photo). Instructor cards render on course pages once you flip Instructor profiles on in Settings → Course pages (off by default).
Course order & SEO
Reorder courses with the ▲▼ arrows on the Courses list — the order applies to the learner portal too. Settings → Course pages sets the portal's browser title and meta description (applied client-side, since your theme wraps portal pages).
Theme app blocks — no code required
Aero ships two blocks you add in the theme editor: Online Store → Customize → product template → Add block → Apps. Both render nothing on products that don't need them, so they're safe on every product page.
Purchase options
Shows the one-time vs subscription choice on product pages, with per-variant prices ("£199 or £19.99/month"). Most useful on themes that don't render subscription plans natively (including Horizon). Place it next to your Buy buttons. It follows variant switching — a variant without a subscription (like a team pack) shows no plan — and on subscription-only products (memberships) it auto-selects the plan so Add to cart just works. Settings: heading, one-time label, accent and border colors.
Course syllabus
Renders the course outline as an accordion — modules with lesson lists (type chips: Reading, Video, Audio, PDF, Interactive, Live; durations), a totals line ("3 modules · 14 lessons · 2 quizzes · 90 min"), Free preview badges, and graded assessments with pass marks. Updates automatically every time you publish. Settings: heading, expand-first-module, show/hide durations, totals and assessments, badge labels, colors.
Theme integration — show the syllabus anywhere
When you publish a course, Aero writes the curriculum onto the product as metafields (namespace aero) — so merchants and theme developers can showcase the module, lesson and quiz list on the product page, collection cards, landing pages, anywhere Liquid runs. No API key needed; this is public data by design.
Available metafields (per course product)
| Metafield | Type | What it holds |
|---|---|---|
aero.curriculum | json | Modules → lessons (title, type, duration) + quizzes (title, pass mark, question count) + totals |
aero.module_count | integer | Number of modules |
aero.lesson_count | integer | Number of lessons |
aero.quiz_count | integer | Graded quizzes |
aero.duration_minutes | integer | Total lesson duration where known |
The counts also appear in the theme editor as dynamic sources, so merchants can drop "12 lessons · 3 modules" into any text block without code.
Liquid example — accordion syllabus in a Custom Liquid section
{% assign cur = product.metafields.aero.curriculum.value %}
{% if cur %}
<div class="aero-syllabus">
<h3>What you'll learn</h3>
<p>{{ cur.totals.modules }} modules · {{ cur.totals.lessons }} lessons
{% if cur.totals.quizzes > 0 %} · {{ cur.totals.quizzes }} quizzes{% endif %}</p>
{% for mod in cur.modules %}
<details {% if forloop.first %}open{% endif %}>
<summary>{{ mod.title }}{% if mod.free_preview %} — free preview{% endif %}</summary>
<ul>
{% for lesson in mod.lessons %}
<li>{{ lesson.title }} <small>({{ lesson.type }})</small></li>
{% endfor %}
</ul>
</details>
{% endfor %}
</div>
{% endif %}
JavaScript alternative — fetch it anywhere
Themes that prefer JS can fetch the same data live from the storefront (works on any page, signed by Shopify automatically):
fetch('/apps/courses/api/curriculum?product_id={{ product.id }}')
.then(r => r.json())
.then(({ data }) => { /* data.modules, data.quizzes, data.totals */ });
IP protection
Optional, off by default (Settings → Security). Limits how many network locations can use one learner account in a rolling week. Known devices always keep working — only new locations past the limit are refused, and blocks appear in Insights. Keep the limit generous: mobile networks and VPNs rotate addresses.
Export & import (Gold+)
Settings → Export & import downloads your entire course structure — courses, modules, lessons, quizzes, questions — as one portable JSON file, and imports such files as drafts. Use it for backups, moving between stores, or staging. Media and SCORM files are referenced, not copied; enrollments and certificates never move.
Products reconnect automatically
Exports remember each course's product. On import, Aero checks the destination store: restoring into the same store re-links by product ID; if you copied products across with Shopify's product CSV (handles travel with it), courses re-link by handle. The import banner reports how many reconnected. Anything unmatched stays a clean draft — link it manually from the course editor's Pricing section, or just hit Publish to create a new product.
Developer API (Gold+)
Settings → Developer API issues keys for the aero/v1 REST API — read or manage nearly everything programmatically. Full reference: aeroapp.org/docs/api.
Plans & limits
| Plan | Courses | Highlights |
|---|---|---|
| Free | 1 | Full course builder, storefront portal, selling |
| Bronze | 10 | + quizzes, certificates & designer, drip, reviews, email templates |
| Gold | 50 | + SCORM, progression rules, portal branding, custom code, export/import, developer API |
| Platinum | Unlimited | + team packs, compliance dashboards, reminders, groups, document vault, SMTP |
All paid plans have a 7-day free trial, monthly or yearly. Upgrade, downgrade or cancel any time from the plan page — no support ticket needed.