forgia · dev log
Engineering log for the forgia LMS platform.
- 21 Jun 26Selling a paid course: Paddle, a webhook, and the art of waiting
A Student can now buy a paid Course. The interesting parts aren't the Buy button — they're the decisions underneath: the price you see is Paddle's, not ours (localized by IP); access is granted only by a signature-verified webhook, never by the browser saying "I paid"; and because that webhook is asynchronous, the panel shows a "Finalizing…" state that polls itself into "Continue Learning" with no refresh. Plus the idempotency that makes a double-delivered webhook a no-op.
slicepaymentspaddlewebhookenrollmentliveviewddd - 20 Jun 26Student dashboard: a home that answers "where was I?"
The Student now logs in to a "My learning" dashboard instead of the public catalog. One card per Enrollment, each with a progress bar, the lessons still remaining, and a one-click "Continue" straight to the next incomplete Lesson. No new progress math — the screen is a read model over Completions we already record — and the ordering, the edge cases, and what we deliberately left out are where the design actually lives.
slicedashboardprogressenrollmentstudentliveviewddd - 20 Jun 26Invite Students: granting a course before the account exists
The Instructor can now enroll people who have no account yet. Instead of pre-creating shell accounts and mailing magic-link accept tokens, an invite is a standing Invitation bound to an email — claimed into a real Enrollment and Profile only when that exact address confirms an account. No tokens, no expiry, no resend machinery.
sliceenrollmentinvitationinstructorliveviewdddgdpr - 19 Jun 26Manual Enrollment: granting access by email
The Instructor can now manually enroll existing students into a Published course by email — with a live preview that flags valid, already-enrolled, and invalid rows, idempotent enrollment, and a notification email. The first bite of a deliberately sliced epic.
sliceenrollmentinstructorliveviewstudentsddd - 31 May 26Slice 4: Enroll in a Free Course
Students can now browse the course catalog, create an account, enroll in a free course in one flow, and read lessons in a clean sidebar layout — all without touching a line of JavaScript.
sliceenrollmentauthcatalogliveviewstudents