Product platform · EdTech

GeberLMS

The Learning Management System used to sell the courses produced by Helveticore OÜ (Estonia): catalogue, enrollment, coupons, VAT/OSS invoicing, e-testing and LLM-generated quizzes — with admin, tutor and learner roles, in four interface languages.

Phase: prototype — 201 tests green
201
Vitest tests green (pure domain layer, TDD)
4
interface languages — FR · EN · AR · DE (RTL for Arabic)

Project card

  • Developed by — Helveticore OÜ (Estonia)
  • Repository — helvetou/GeberLMS (private)
  • Stack — SvelteKit (adapter-cloudflare) · TypeScript strict
  • Infrastructure — Cloudflare Workers/Pages · D1 (Drizzle) · R2 · Workers AI
  • Payments — Payoneer + Revolut (no Stripe)
  • Process — CMMI-DEV L3 (SPEC-001…003)

Architecture at a glance

  • Runtime — the whole app runs on a single Cloudflare Worker; static assets served by Pages.
  • Data — D1 (SQLite) via Drizzle ORM: 16 tables, migrations 0001_init → 0005_quiz_questions.
  • Files — R2 bucket geberlms-files for learner uploads and course resources.
  • Auth — sessions on Workers + accounts in D1; PBKDF2-SHA256 (Web Crypto).
  • Money — integer cents only; discount on the net price, then VAT at the buyer's country (OSS).

Pure domain layer (src/lib/domain)

Framework-agnostic business logic, tested in isolation with Vitest — the TDD core of the platform.

Money & pricing

  • vat.ts — EU VAT rates, buyer-country rule, non-EU = 0.
  • coupon.ts — % / fixed amount, 100 % free, expiry, usage cap.
  • pricing.ts — discount on net, then VAT (OSS).
  • invoice.ts · payment.ts — invoicing and Payoneer flow.

Access & roles

  • roles.ts · authz.ts — admin / learner / tutor permissions.
  • user.ts · session.ts · password.ts — accounts, sessions, PBKDF2.
  • guardianship.ts — tutor ↔ learner links and visibility.

Learning

  • catalog.ts · content.ts — course → modules → lessons → resources.
  • enrollment.ts — single-payer enrollment resolution.
  • progress.ts · quiz.ts · upload.ts — progress, e-testing, uploads.

Platform

  • activity.ts — audit journal (login, deposit, correction, payment).
  • dashboard.ts — learner / tutor dashboards.
  • i18n.ts — FR / EN / AR / DE, RTL for Arabic.

Actors & roles (FR-01…FR-07)

Admin

Operator. Manages courses, resources, coupons, accounts and payments. No public self-signup: learner and tutor accounts are created by the admin.

Learner (apprenant)

Takes courses; either financed by a tutor or self-paying (self_payer flag). Follows progress and uploads documents.

Tutor (tuteur)

Finances one or more learners and follows their progress — sees only the learners it finances.

What is implemented

Functional areas

  • Accounts & access — roles, guardianship, single-payer enrollment (FR-01…FR-07).
  • Catalogue — course / module / lesson / resource CRUD, reversible hide (FR-10…FR-14).
  • Progress — learner progress, dashboards, activity journal (FR-20…FR-23).
  • Uploads — R2 document deposits (FR-24).
  • E-testing — quiz, optional timing, auto-correction (FR-30); LLM quiz generation (FR-31).

Commerce & platform

  • Payments — Payoneer + Revolut, access activation on confirmation (FR-40/FR-41).
  • Coupons — % or fixed, 100 % free, expiry, usage cap (FR-42…FR-45).
  • Invoicing — integer-cent pricing, VAT/OSS, invoice generation (FR-46/FR-47, BR-01…BR-05).
  • i18n — FR / EN / AR / DE interface with RTL for Arabic.
  • Deployment — Cloudflare Worker build + D1 migrations + seeds.

Next steps & compliance

Remaining build items

  • Anti-copy — on-the-fly rendering, no mass export, watermark, quotas (NFR-10).
  • Payoneer mode — semi-manual payment request vs checkout to be confirmed.
  • Dependency hygiene — clear the 5 dev-dependency npm audit findings.

Compliance points

  • TVA / OSS — re-validate rates against an official source; validate EU VAT registration with an Estonian accountant.
  • RGPD — consent, minimisation, right to erasure.
  • Token HELVETO_PAT — expires 2026-10-21, to renew.
Current state: working prototype — the pure domain layer (20 modules), the Cloudflare server layer (D1/Drizzle, R2, auth, payments) and the admin / tutor / learner pages are implemented test-first. The full suite passes (201 tests). Detailed documents live in Documentation & technical reports.