forgia · dev log
Engineering log for the forgia LMS platform.
- 15 Oct 26Fences That Do Something
Text Lessons gain three Rich Blocks the Instructor writes as plain markdown fences: a Checklist, an Annotated Example and a Flashcard. Rendered on the server, all Instructor text escaped, nothing stored.
elixirphoenixliveviewmarkdownsecurityinstructor - 23 Sep 26The Page Before the Course
A Course can now have a public page before it has any Lessons: the pitch, and a form that drops an address straight into Brevo. The interesting part is a one-line rule that looked like it fell out of the status field and didn't — because status is exactly the field that moves back.
elixirphoenixliveviewectobrevotestinginstructor - 23 Sep 26One Box, One Write
A visitor joining one Course's Waitlist can now also ask to hear about every future launch. The checkbox was the easy part. Deciding what a single signup means when it touches two lists took the rest.
elixirphoenixliveviewectobrevowaitlistinstructor - 23 Sep 26Coming Soon, in the Grid
Announced Courses now show up in the public catalog, carrying a band that says when they open, with the month in the visitor's own language. It is one line of query and a lot of deciding what a card must not say.
elixirphoenixliveviewectogettextcataloginstructor - 17 Sep 26The Patch Is Not the Form
A bug report blamed the video modal. The modal was innocent — the title was already gone before anyone opened it. What LiveView actually puts on the wire for an input-level phx-change, and why a green test suite could never have told us.
elixirphoenixliveviewectotestinginstructor - 14 Sep 26The Second Uploader
An Instructor can now build a cast of Characters once and reuse it everywhere. The screen is two text fields and two image slots — and putting a second uploader on one page broke a component that had worked fine on four others, twice, in ways no test in the suite could have seen.
elixirphoenixliveviewectouploadsgettextinstructor - 24 Aug 26A Repair Tool That Is Actually Part of the Workflow
Durations are fetched when a Lesson is saved, which sounds complete until you notice that uploading a video and immediately pasting its URL is the normal thing to do — and guarantees no duration. The button that fixes it is not a maintenance script; it is step two.
elixirphoenixliveviewcssgettextinstructor - 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