Skip to Content
Odoo 18 CE eLearning — K-5 Classroom Guide

The eLearning module in Odoo 18 CE (internally named Slides) is a full-featured learning management system built into the Odoo ecosystem. It uses a Course → Section → Slide hierarchy and publishes content through Odoo's built-in website engine — meaning learners access material through a public or access-controlled web portal with no separate LMS installation required.

Community vs Enterprise: Odoo 18 CE includes the full slide creation workflow, YouTube/Vimeo embeds, PDF & image uploads, karma/points, certificates, forums linkage, and website publishing. Enterprise adds SCORM 1.2/2004 import and video transcoding pipelines. Everything in this guide is available in CE.
📚
eLearning
Module
🌐
Website
Module
💬
Forum
Module
+
✍️
Blog
Module
👤
Portal
Users

Odoo's website module must be installed as the eLearning front-end renders through it. The Forums and Blog modules are optional companions that enhance discussion and content publishing workflows — both are covered in Sections 7 and 8.

Core menu path for course managers:
eLearning Courses [Course Name] Slides

Follow these steps in order the first time you set up the eLearning module for a classroom.

Install required modules

In Settings → Activate Developer Mode, go to Apps, search for eLearning and install it. Odoo will automatically install Website as a dependency. Optionally also install Forum and Website Blog.

Configure the Website

Navigate to Website → Configuration → Settings. Set a site name, confirm your domain (or use the Cloudflare tunnel hostname), and choose whether user registration is open or invite-only. For K–5, use invite-only or portal access only.

Create your first Course

Go to eLearning → Courses → New. Give it a name (e.g., "2nd Grade — Math Foundations"), set a cover image, assign tags, and configure visibility and enrollment settings (see Section 3 for full field reference).

Add Sections & Slides

Inside the course, click Add a Section to create topic groupings (e.g., "Week 1 — Counting", "Week 2 — Shapes"). Within each section, click Add a Slide to upload or embed content (see Section 4 for all supported formats).

Enroll learners

Use Members on the course record to manually add portal users (students/parents), or set Enrollment to Free and share the course URL. For classroom groups, use the On Invite setting and send email invitations from the course.

Publish the course

Click the Go to Website button from the course record, then use the top blue Unpublished → Published toggle to make the course live. Test the URL in a private browser window to verify learner-visible content before sharing.

Monitor progress

Return to eLearning → Courses and click into any course. Use the Members smart button to view per-student completion. Navigate to eLearning → Reporting → Course Statistics for aggregate dashboards.

In Odoo 18 CE the eLearning "Course" is also sometimes called a Channel in the URL and internal API — the terms are interchangeable. Below is a full reference for every field you'll encounter when creating or editing a course.

Course Title Shown as the page headline. Use grade + subject + term for easy sorting (e.g., "K — Phonics · Fall 2025").
Tags Free-text labels. Create a tag taxonomy: Grade Level (K, 1st … 5th), Subject (Math, ELA, Science), Term (Fall, Spring).
Cover Image JPEG or PNG, min 800 × 450 px recommended. Displays as the course thumbnail on the website catalog page.
Responsible The Odoo internal user (teacher account) who manages the course. Receives enrollment notifications and reports.
Website Published Toggle. Unpublished = invisible to portal users. Always review before publishing. Publish per-slide and per-course independently.
Visibility Public — anyone on the web. Signed In — requires an Odoo login. Course Members — only enrolled students. Use "Course Members" for classroom isolation.
Enroll Policy Free — anyone can self-enroll. On Invite — teacher must add members. Best for K–5: On Invite or managed by a teacher account.
Completion Choose how students "finish" the course: All Slides Viewed, a defined Number of Slides, or after passing a Certification Quiz.
Forum Link an existing Forum to this course. Creates a Q&A tab on the course page. See Section 7.
Website Description Rich-text field shown on the public course page. Add learning objectives, grade level, parent instructions, and weekly schedule here.
Karma Gain (Slide) Points awarded per slide completed. Used in leaderboards. For K–5, keep values low and consistent (e.g., 1 pt/slide) or disable karma display if competitive scoring is not appropriate.
Certificate Auto-generated PDF awarded on course completion. Can include student name, course name, and date. Requires completion criteria to be set above.
Naming Convention Tip: Align course names with your Docker stack naming scheme. For example, a CalTekNet deployment might name courses cap-K-math-f25 to echo the Odoo instance handling that school program, making reporting and multi-instance management cleaner.

Each piece of content within a course is called a Slide. When adding a slide, you first choose its type, which determines which upload or embed options appear. Below are all seven slide types available in Odoo 18 CE, followed by a full file-format reference table.

📄

Article

Rich HTML text editor. Supports images inline, formatted text, links, tables, and embedded media via URL. Ideal for lesson notes, instructions, or reading passages.

No file upload · HTML content
🎞️

Presentation

Upload a slide deck or link to Google Slides / Office Online. Renders slide-by-slide in the browser. Best for direct classroom instruction content.

.pdf · .pptx · .ppt · .odp · Google Slides URL
🎬

Video

Embed a YouTube or Vimeo URL, or upload a video file directly. YouTube embeds are the most bandwidth-efficient option for community deployments.

.mp4 · .webm · .ogv · YouTube URL · Vimeo URL
🖼️

Infographic

Single image slide. Use for diagrams, visual vocabulary, classroom posters, maps, or illustrated timelines. Scales to fit the viewport.

.png · .jpg · .jpeg · .gif · .svg · .webp
📑

Document

Upload a static document for download or inline preview via the browser's built-in PDF viewer. Use for worksheets, reading packets, or reference sheets.

.pdf · .doc · .docx · .odt · .txt
🌐

Web Content

Embed any external URL in an iframe. Use for interactive simulations (PhET, Scratch, Khan Academy), Google Forms quizzes, or approved web tools.

Any HTTPS URL · iframe-embeddable sites
📝

Certification

Built-in quiz engine with multiple-choice and open-answer questions. Pass/fail threshold configurable. Awards a certificate on success.

No file upload · configured in Odoo UI

Complete File Format Reference

Format / Extension Slide Type Notes for K–5 Use
.pdf Presentation Document Most versatile format. PDFs from Canva, Google Slides export, or LibreOffice all work. Renders inline without student software. Recommended default.
.pptx / .ppt Presentation Upload directly; Odoo converts for display. Animations may not render. Export to PDF first if transitions are important.
.odp Presentation LibreOffice Impress native format. Fully supported. Good choice for TurnKey Linux / open-source classroom builds.
.mp4 Video H.264 MP4 is the safest direct-upload choice. Keep files under 50 MB for smooth streaming on community networks. H.265/HEVC may not play in all browsers.
.webm Video Excellent for self-hosted deployments. Smaller file size than MP4. Supported in all modern Chromium and Firefox browsers.
.ogv Video Open-format Ogg video. Well-supported in open-source browser environments. Less common but fully valid in Odoo.
YouTube URL Video Paste full YouTube watch URL. Odoo extracts the embed automatically. Most bandwidth-efficient option. Note: requires outbound internet access from the student device.
Vimeo URL Video Same as YouTube. Vimeo Pro allows domain-restricted embeds for privacy — useful if hosting proprietary classroom video content.
Google Slides URL Presentation Use the "Publish to web" embed link from Google Slides. Auto-updates when the source changes — great for teachers who regularly revise content.
.png / .jpg / .jpeg Infographic Use for visual vocabulary cards, diagrams, maps, or illustrated instructions. PNG preferred for graphics with text; JPEG for photos.
.gif Infographic Animated GIFs play automatically. Useful for simple science animations or process loops (water cycle, metamorphosis stages).
.svg Infographic Resolution-independent vector graphics. Ideal for math diagrams and labeled illustrations that need to scale on any screen size.
.docx / .doc Document Word-format worksheets. Displayed via browser's download/preview flow. Consider converting to PDF for more consistent rendering across student devices.
.odt Document LibreOffice Writer format. Accepted as a document slide. Consistent with open-source TurnKey LAMP / LEMP stack deployments.
.txt Document Plain-text reading passages or code snippets for upper-elementary STEM electives. Minimal formatting; consider an Article slide instead for richer text layouts.
HTTPS URL (iframe) Web Content PhET Interactive Simulations, Scratch projects, Google Forms, Quizlet flashcard sets, Desmos activities. The target site must allow iframe embedding (check X-Frame-Options header).
Audio files (.mp3, .wav, .ogg): Odoo 18 CE does not have a dedicated Audio slide type. To include audio, either embed it inside an Article slide using an HTML5 <audio> tag in the source view, or use a YouTube/Vimeo URL pointing to an audio-visualizer video. For IIAB/offline deployments, direct HTML audio embeds in Article slides work without internet access.

Effective segmentation lets you manage one Odoo instance across multiple classrooms while keeping each grade's content isolated. There are three complementary strategies — use one or combine them based on your deployment scale.

Strategy A — One Course per Grade + Subject

The simplest and most recommended approach for most deployments. Create a separate course for each grade-subject combination. Tags group them in the catalog.

K–1

Kindergarten & 1st Grade

  • Short slides (≤5 min each)
  • Infographic + Video type priority
  • Large text, simple navigation
  • Parent-monitored enrollment
  • No karma / leaderboard display
2nd–3rd

2nd & 3rd Grade

  • Presentation + Article slides
  • Web Content for interactive tools
  • 2–4 sections per course
  • Simple Certification quizzes (5 Qs)
  • Karma optional — fun badges
4th

4th Grade

  • All slide types appropriate
  • Forum for project Q&A
  • Research-style Document slides
  • Certification with longer quizzes
  • Cross-course enrollment possible
5th

5th Grade

  • Student-led project submissions
  • Blog for showcasing work
  • Web Content: Scratch / code tools
  • Full karma + certificate awards
  • Peer review via Forum posts

Strategy B — Section-Based Segmentation within a Course

If you run a multi-grade program (like a K–2 reading circle), create one course and use Sections to separate grade-level content within it. Name sections clearly: Kindergarten · Phonics, 1st Grade · Sight Words, etc. Students can skip ahead or review prior sections without separate enrollment.

Strategy C — Multi-Instance Segmentation (Docker Swarm)

For multi-school or program-isolated deployments (e.g., separate CalTekNet program sites), run dedicated Odoo instances per school program — each with its own database. This is your existing pattern (cap, cultural, africa stacks). Each program manages its own eLearning catalog independently. Portainer CE handles stack-level deployment and health monitoring across nodes.

Tag Taxonomy Recommendation: Create a consistent tag set across all courses: Grade:K, Grade:1Grade:5 · Subject:Math, Subject:ELA, Subject:Science, Subject:Social-Studies, Subject:Art, Subject:STEM · Term:Fall, Term:Spring · Level:Foundational, Level:On-Grade, Level:Extension. These tags display as filter chips on the public course catalog page.

Odoo 18 CE does not have a native "Learning Group" object separate from Courses, but you can implement classroom groupings through a combination of Portal Users, Enrollment settings, and Tags.

Create Portal Users for students (or parents)

Go to Settings → Users & Companies → Users → New. Set the user type to Portal. For K–3, create accounts in a parent's name; for 4–5, student accounts are appropriate if supervised. Portal users can only see published website content they are enrolled in — they have no access to the Odoo backend.

Use Enrollment = "On Invite" for classroom control

Set each K–5 course to Enroll Policy: On Invite. Then, from the course's Members tab, use Add Members to add specific portal users. This prevents students from self-enrolling in courses above their grade.

Model a "class section" using a Course Group tag + Mailing List

Create a contact tag like Room-14-2025 and assign it to all students in that classroom's portal accounts. When a new course launches, use Email Marketing or Odoo's built-in Send Invitations action filtered by that tag to enroll the whole class at once.

Differentiated groups within one course

Use Sections with a slide marked as Can be previewed vs Requires enrollment. Advanced students can be directed to specific sections via direct slide URLs shared in a Forum post or teacher email. All tracking still logs to the same course dashboard.

Parent Access: For K–3 deployments, enroll the parent's portal account rather than creating separate child accounts. The parent logs in at home, sits with their child, and the progress tracks to that account. This avoids COPPA/CIPA consent complexity for under-13 users.

The Forum module adds a structured Q&A / discussion board that can be linked directly to a course. When linked, a Discuss or Forum tab appears on the public course page, allowing learners to post questions visible to classmates and teachers.

Forum App

Module: forum Menu: Website → Forum

Forums in Odoo use a karma gate system — users need minimum karma points to post, answer, upvote, or moderate. For K–5, reduce all karma thresholds to zero or very low values so students are never blocked from participating.

  • Create one Forum per Course (or one shared "Classroom Forum" for multiple courses)
  • Navigate to Website → Forum → New, name it, set mode to Questions
  • In the Course record, set the Forum field to link it
  • In Forum settings, reduce karma thresholds: Post = 0, Answer = 0, Upvote = 1
  • Enable Moderation so all new posts require teacher approval before appearing
  • Tag forum topics with subject areas for organized discussion threads
K–5 Workflow: After a student views a video slide, a Discussion button on the slide page can deep-link to a pre-filtered Forum view for that slide's topic. Teachers post the discussion prompt as a sticky pinned question; students reply as answers. This mirrors a structured Socratic discussion without requiring synchronous class time.

Appropriate grade use

  • K–2: Teacher-only posting. Use Forum as an announcement board; students read, no posting required.
  • 3rd–4th: Guided Q&A. Teacher posts question; students post one answer each (moderation on). Low karma gates.
  • 5th: Full discussion. Students post questions, peer-answer, upvote. Introduce community norms. Enable karma display to encourage positive contribution.

The Website Blog module is an optional but powerful companion to eLearning for K–5 use cases. While the Forum enables discussion within a course, the Blog publishes long-form content alongside a course — weekly classroom news, project showcases, curriculum narratives, or teacher reflections. Blog posts appear on the public site and can be linked from within course slides using the Article editor's hyperlink tool.

Website Blog App

Module: website_blog Menu: Website → Blog
  • Create one Blog per classroom or program (e.g., "Room 14 News · 2025–26")
  • Navigate to Website → Blog Posts → New to create a post
  • Assign the post to the appropriate Blog and add cover image + tags
  • Blog posts are separate from course slides — they live at /blog on your site
  • Link blog posts from course Article slides using the rich-text hyperlink tool
  • Only internal Odoo users (teachers) can create blog posts in CE — portal users read only
Student Showcase Workflow (5th Grade): A teacher can create a blog post template and paste in student-written content (collected offline or via a Google Form). Each student's project gets its own blog post, tagged with their classroom. Link the collection of posts to a Course slide labeled "Student Showcase" using the Web Content (iframe/URL) slide type. This gives 5th-graders a published audience for their work without requiring individual backend access.

Blog vs Forum — when to use each

Use Case Forum Blog
Weekly class news ✓ Blog post
Student Q&A on a lesson ✓ Forum thread
Project showcase / portfolio ✓ Blog post per project
Peer review & feedback ✓ Forum answers
Curriculum narrative / context ✓ Blog series
Help / troubleshooting thread ✓ Sticky question
Field trip / event recap ✓ Blog post + photos

Odoo 18 CE eLearning tracks learner activity at three levels: slide views, course completion, and certification results. Combined with the Karma system, teachers can monitor engagement, identify struggling students, and award recognition.

Slide Level
View Tracking
Odoo records when a portal user opens each slide. A "Mark as Done" button lets students confirm completion. View count and completion flag both appear in the member report.
Course Level
Completion %
Auto-calculated from slides marked done vs total slides. Visible to both the student (on their portal dashboard) and the teacher (on the course Members tab).
Certification
Quiz Results
If a Certification slide is included, pass/fail status, attempt count, and score are stored per user. Teachers can review answers from the certification report.

Karma System — K–5 Configuration

The karma system awards points for completing slides, passing quizzes, posting in forums, and having answers upvoted. Points accumulate on the user's portal profile and can trigger Ranks (badges). For K–5 contexts, configure karma conservatively:

Karma on course join Set to 0. No reward just for enrolling — earning points should reflect learning activity.
Karma per slide completed Set 1–3 points. Keep consistent across all K–5 courses.
Karma for quiz passed Set 5–10 points. Distinguishes demonstrated learning from passive viewing.
Karma Ranks Create age-appropriate rank names: "Explorer → Discoverer → Scholar" instead of generic "Beginner → Expert" labeling.
Forum karma gates Set Post/Answer thresholds to 0. No student should be karma-blocked from participating in class discussion.
Certificate generation Enable auto-generation from eLearning → Configuration → Courses → Certificate field. Customize the certificate template in the Website builder.

Teacher Reporting Path

Per-student progress

eLearning Courses [Course] Members smart button — lists all enrolled students with completion percentage and last activity date.

Aggregate course statistics

eLearning Reporting Courses — pivot or graph view of enrollments, completions, and karma earned per course.

Slide-level engagement

eLearning Slides [Slide] Statistics tab — shows per-slide view count, completion count, and average time on slide (if video).

The following notes apply to deploying Odoo 18 CE with eLearning on your existing 3-node Docker Swarm cluster (shec.us / 48gb.caltek.net / sada55) via Portainer CE, with Traefik v3.2 + Cloudflare tunnel routing.

Storage requirement: eLearning file uploads (PDFs, videos, images) are stored in Odoo's filestore at /var/lib/odoo/filestore/. For a swarm deployment, this directory must be mounted from a shared volume accessible to all nodes running the odoo service — otherwise slide uploads visible on one node will 404 on another. Use an NFS share or GlusterFS volume, or pin the Odoo service to a single node with placement: constraints: [node.hostname == shec].
# Relevant eLearning-specific additions to your existing Odoo 18 CE stack # Add to the odoo service environment in your docker-compose.yml: services: odoo: environment: - ODOO_ADDONS_PATH=/mnt/extra-addons,/usr/lib/python3/dist-packages/odoo/addons volumes: # Shared filestore for slide uploads — mount on all Odoo service nodes - odoo-filestore:/var/lib/odoo/filestore - odoo-data:/var/lib/odoo deploy: # Pin to manager node if not using shared storage placement: constraints: - node.role == manager - node.hostname == shec volumes: odoo-filestore: driver: local # OR use an NFS driver for multi-node file sharing: # driver_opts: { type: nfs, o: addr=nas.caltek.net,rw, device: ":/odoo/filestore" }
Cloudflare Tunnel: Your existing caltek-net-tunnel token handles routing for *.caltek.net subdomains. For the K–5 eLearning portal, set a distinct subdomain in Cloudflare Zero Trust (e.g., learn.caltek.net → Odoo service on port 8069) and add an Access Policy requiring Google Workspace email authentication for parent/teacher accounts. Portal students logging in via Odoo's own portal auth don't need a separate Cloudflare Access policy.
TurnKey Linux / DistroWatch Note: If deploying on a TurnKey Linux base (e.g., TurnKey LAMP or TurnKey LXC), run Odoo in a Docker container on top of the TurnKey host rather than using the TurnKey Odoo appliance, which ships an older version. The odoo:18.0 official Docker Hub image combined with the PostgreSQL 18 image matches your current swarm stack configuration. DistroWatch maintains a current review of TurnKey releases — monitor for kernel/security updates relevant to your swarm node OS base.

Use this checklist before launching any K–5 course to an enrolled classroom.

  • Course visibility set to Course Members Only — not Public.
  • Enrollment policy set to On Invite; no self-enrollment enabled for student-facing courses.
  • All slides individually published and tested in a private browser window as a portal user.
  • Video files are under 50 MB or embedded as YouTube/Vimeo URLs to minimize server storage load.
  • All external URLs (iframes, YouTube, Google Slides) verified as working from a student-network IP.
  • Forum moderation enabled — teacher-approval required before posts go live (for K–4).
  • Karma karma thresholds for Forum posting set to 0 — no student blocked from participating.
  • Certificate template reviewed — correct school/program name, no placeholder text remaining.
  • Cover image uploaded and course description complete — parents see this before their student starts.
  • Tags applied: Grade Level, Subject, and Term all set for catalog filtering.
  • Portal user accounts created for enrolled students/parents; test login confirmed.
  • Odoo filestore volume mounted on a persistent, shared path — verified with a test file upload.
  • Cloudflare Access policy or equivalent restricts course portal URL to enrolled school network or authenticated users only.
  • Completion criteria set (All Slides / N Slides / Certification) — student progress bar will display correctly.
Produced for CalTekNet Independent Media Production · Community Technology Sovereignty Initiative · Odoo 18 Community Edition · Docker Swarm + Portainer CE Deployment · Open Source Educational Infrastructure
Rating
0 0

There are no comments for now.

to be the first to leave a comment.