Course authoring for Canvas LMS

Your course already knows the answers.

LessonFresh turns what you teach into a per-course knowledge base — student chat that cites the exact paragraph, practice generated with provenance, and activities students can actually play. All inside Canvas, through LTI.

Instructors sign in with their Canvas account; students arrive through course links — nothing extra to install for them.

LTI 1.3Deep linkingWCAG-mindedYour content stays yours

Student chat

Answers that show their work

Students ask questions on the lesson page and get answers grounded in this course's own material — not the open internet. Every claim carries a citation that deep-links to the exact paragraph it came from, so "where does it say that?" is always one click.

Practice

Knowledge checks with provenance

Generate practice questions from what you actually taught — multiple choice, short answers graded by AI with honest feedback, fill-in-the-blank. Every item records the content it was grounded in and flags itself for review when that content changes.

Import

Start from the course you already have

Pull an existing Canvas course or a Common Cartridge export. Pages, files, and syllabus become searchable course knowledge; module structure mirrors both ways, so nothing has to be rebuilt by hand.

Playground

Try it — this is the real thing

These aren't mockups: they're the same activity components students get on lesson pages, running a mini-lesson on how learning actually works. Drag, flip, and check — keyboard works too.

FlashcardsWhy retrieval beats rereading1 / 4

In the product these are generated from your course content in one click — with per-question analytics, and answer keys that never reach the browser.

Custom interactives

When the built-ins aren't enough, build your own

Write plain HTML, CSS, and JavaScript — or describe the widget and let the authoring assistant write it — and it runs as an activity right on the lesson page. Simulations, explorable diagrams, little games: whatever the lesson needs.

var ctx = sky.getContext("2d");

function draw() {
  var a = orbit.value * Math.PI / 180;
  ctx.clearRect(0, 0, 640, 240);

  // Ocean: an ellipse whose long axis points at the Moon —
  // one bulge from gravity, one from inertia
  ctx.save();
  ctx.translate(320, 120);
  ctx.rotate(a);
  ctx.fillStyle = "#9ed4f2";
  ctx.beginPath();
  ctx.ellipse(0, 0, 82, 56, 0, 0, 7);
  ctx.fill();
  ctx.restore();

  // Earth
  ctx.fillStyle = "#14608f";
  ctx.beginPath();
  ctx.arc(320, 120, 50, 0, 7);
  ctx.fill();

  // Moon
  ctx.fillStyle = "#cfd8dd";
  ctx.beginPath();
  ctx.arc(320 + Math.cos(a) * 240, 120 + Math.sin(a) * 92, 13, 0, 7);
  ctx.fill();
}

orbit.addEventListener("input", draw);
draw();

This is that exact code, running live — drag the slider.

Every widget runs in an origin-isolated sandbox (sandbox="allow-scripts", no same-origin): it can draw, animate, and respond to input, but it can never read student sessions, call the API, or reach into Canvas.

Analytics

See what's working — and what's missing

Every number answers a “so what”: an unread lesson gets moved, a hard question gets rewritten, a content gap becomes a draft page. And it's aggregate-only by design — insight into the course, not surveillance of students.

How it works

From existing course to living course

Step 1: Connect Canvas

Instructors sign in with their Canvas account, or launch straight from a course. Registration is LTI 1.3 — your Canvas admin approves the tool once for the whole institution.

Step 2: Author or import

Write lessons in the editor, or pull in an existing Canvas course or Common Cartridge export. Everything becomes the course's private knowledge base the moment it's published.

Step 3: Place with deep linking

Drop lessons and activities into Canvas modules. Students get cited chat, knowledge checks, and playable activities right on the page — nothing extra to install.

For institutions

Built to pass the committee

The unglamorous requirements — standards, accessibility, data ownership, cost control — are the load-bearing ones. They're where LessonFresh started, not where it's hoping to end up.

LTI 1.3, done right

Cookieless launches that survive Safari in an iframe, deep linking as the canonical placement, and dynamic registration with an approval queue for your admins.

Accessibility as a practice

Keyboard-operable drag-and-drop with screen-reader announcements, alt-text enforcement, an authoring accessibility linter, and an automated axe-core test suite in CI.

No content lock-in

Every page, activity, and asset lives app-side; Canvas stores nothing but LTI links. Migrating means re-placing links — never converting content.

A real control plane

Multi-tenant platform administration with per-institution AI metering, monthly statements, spend caps, and an append-only audit log.

Contact

See it in your Canvas instance

Tell us a little about your institution and what you teach. We'll set up a walkthrough with your own course material — imported live, questions answered with citations.

We read every message.

LessonFresh — course-grounded AI inside Canvas