forgia · dev log
Engineering log for the forgia LMS platform.
- 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