Decisions Log
Decisions Log
Key choices made in building the platform, with rationale. Newest first.
Modal video player on pathway page instead of redirecting to /watch/
Personalised pathway cards open each lecture in an inline modal with a Vimeo iframe, rather than sending the user to the full course viewer. Rationale: the pathway is ephemeral per interview session and not a persistent enrolment, so the full viewer with progress tracking would be overkill. Modal is fast, focused, keeps the user in the pathway context.
Claude API key lives in PageMotor admin, not FPM env
Initially stored the Anthropic key as an FPM pool environment variable. Switched to reading from PageMotor's built-in Architect_AI_Claude_ai option (editable via /admin/ai/). Single source of truth, Hasmukh can rotate without SSH access, no FPM reload needed.
All MLUCT videos whitelisted for cpd.medilearn.africa embed
Batch-authorised the entire 300-video UCT library for embedding on the CPD domain in one API run. Takes ~60 seconds. Previous whitelisting was only for s2l.online; the new domain needed its own entry on each video. Videos retain their password protection for direct vimeo.com access.
External JS file instead of inline script blocks
PageMotor's content pipeline HTML-encodes ampersands inside CMS page content, which breaks inline JavaScript (&& becomes &&). Moved all interactive scripts (interview chat, pathway modal) into separate .js files served as static assets. Belt-and-braces fix for a gnarly silent failure mode.
Full rebrand over cloned S2L chrome
Both sites inherited S2L's theme when we cloned from s2l.online. Rather than modifying theme files, each site got a small *-brand plugin that renders site chrome via [shell-start]/[shell-end] shortcodes and hides the S2L chrome via body:has() CSS selectors. Keeps theme untouched, makes branding per-site, and the pattern is reusable for any future spin-off.
AI interview powered by Claude Sonnet 4.5 via Anthropic API
Chose Sonnet 4.5 over cheaper Haiku because the interview needs conversational warmth and good follow-up judgement. Cost ~£0.02 per interview which is a rounding error. Max-tokens capped at 500 per response to keep interviews punchy. System prompt lives inside the plugin class so it can be iterated without schema changes.
Prototype over plan
Chose to build a working prototype ahead of finalising brand, content pathways, or business model. Rationale: “a good prototype is better than a great plan” — easier for Hasmukh and UCT to react to something concrete than to a slide deck. All naming and positioning choices are explicitly marked as reversible.
Use cpd.medilearn.africa for the platform and documentation.mobilearn.africa for the docs
Subdomains on existing owned TLDs: no domain purchase cost, fast to set up, both reversible. The naming aligns with the audience: medilearn for medical CPD (the product), mobilearn for MobiLearn project assets (the docs).
Target FCP candidates, not neurologists specifically
Original brief: neurology conference tool. Content audit revealed the entire FCP curriculum is well-covered (211h, 28 specialties) but no siloed neurology library. Pivoting to an FCP platform with specialty pathways (including neurology) maximises the value of existing content while keeping the neurology conference use case as a valid entry point.
Anthropic API over Max subscription for the interview
Claude Max covers personal Claude Code usage, not production apps serving end users. The platform needs its own Anthropic API account. Cost estimate: ~£0.02–0.05 per full interview (Sonnet 4.5, 5–8 exchanges). 100 attendees ≈ £5.
Reuse ep-courses plugin infrastructure from s2l.online
The ep-courses plugin built for s2l already handles Vimeo integration, course/lesson models, viewer UI, activity tracking, and landing pages. Copying that wholesale into the new CPD install removes weeks of work. The CPD-specific home page is a thin new plugin (ep-cpd-home) that composes existing parts.