forgia · dev log
Engineering log for the forgia LMS platform.
- 09 Oct 26In My Own Words
The home page finally has the introduction video and copy that sounds like the person who teaches the courses. The code was small. The interesting parts were a video in the wrong library and a test that refuses em dashes.
elixirphoenixliveviewgettextbunnycopyvisitor - 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 - 16 Sep 26The Prototype Overreached
A Character now delivers a Sentence Selection as speech instead of prose. The layout that specified it also quietly rewrote the feedback rules — including one that would have handed the Student the answer key — so this item shipped the frame and refused the rules.
elixirphoenixliveviewectocssgettextdesign-systemstudent - 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 - 28 Aug 26The Congratulation That Was in the Way
A Student got every Blank right, and the modal that told her so covered the passage she wanted to re-read. She could not check what she had written. The fix is a labelled way out — and a completed state to land on, because the modal was carrying the only way forward.
elixirphoenixliveviewcssgettextstudentusability - 24 Aug 26The Adjective Has Nowhere to Agree
Portuguese makes you pick a gender for the person you are talking to. English does not, so every msgid in this codebase is already neutral and every translation had quietly chosen masculine. Fixing the greeting was five minutes; the interesting part is that the fix generalizes to a rewriting rule, and that the rule turned out to be half-enforceable by the build.
i18ngettextadrcopyinclusive-designelixir - 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 - 23 Jul 26Localized App Interior & Emails: Finishing What the Landing Page Started
Spreading the EN/pt-BR Locale infrastructure from landing and catalog into the Studio, the student learning screens, and every transactional email — plus three real bugs the sweep turned up along the way.
gettextliveviewi18ndesign-systemddd - 20 Jul 26A Real Front Door
The root route stops being a dev-only nav page and becomes a public Landing Page — nav, hero, methodology, instructor bio, and a live course catalog — while reusing the exact catalog card and Paddle pricing already built for /catalog.
liveviewphoenixgettextpaddledesign-system - 16 Jul 26A Profile With No Name Yet
Greeting a Student in Portuguese before they've told us their name meant loosening an invariant that had held since the Profile aggregate was born — plus a single plug that resolves EN/PT-BR the same way for every request, forever.
i18ngettextliveviewectophoenixadrddd