Portfolio · Interactive
A learning experience about a learning designer.
You are the learner. The content is one candidate's case for the work. Each section below is a designed module — read it the way you would a course you were evaluating, not a CV.
Module One
Twenty years to this moment.
Nine inflection points. Each one is a place where the work changed shape. Together they explain how a learning designer ended up writing the application you're reading.
-
At MCIS Language Services, I launched the organisation's first e-learning platform on Moodle, serving 2,000+ working interpreters across Canada. Moving foundational content online — ethics, terminology, code of conduct — reclaimed classroom time for what actually had to happen face to face: role-play, simulated medical and legal cases, the applied practice that professional interpreting depends on.
-
At Sheridan College I managed up to 40 continuing-education course development projects simultaneously and coached around 50 faculty on instructional design fundamentals. I introduced the Quality Matters® rubric as the college-wide quality standard and built the standardised D2L templates that gave the program its visual and structural consistency.
-
OntarioLearn's 1,800-course inventory served 70,000 students annually across 24 community colleges. I designed and led the QA Compatibility framework — evaluation rubrics, processes, training materials, and a MS Access workflow database — and used it to recommend corrective action on 112 courses based on student-feedback analysis.
-
As Director of Product Management at Pink Elephant, I led the development of 25 new education and certification products and grew the e-learning line of business 52% year over year. I worked across distributed teams in 15 time zones and managed external relations with the certification bodies (APMG, AXELOS, PeopleCert, DevOps Institute, EXIN) the company depended on.
-
During COVID I worked through the freeCodeCamp full-stack curriculum end to end: responsive web design, JavaScript and data structures, front-end libraries, back-end microservices, data analysis with Python and pandas, machine learning with TensorFlow, scientific computing, information security. Ten certifications. The first commit. After two decades coordinating instructional designers, subject-matter experts, and multimedia producers, the shift to building the software myself.
-
The PDC Portal began as a single webhook receiver and grew into a Django application that automated nearly every part of certification operations: candidate registration, exam scheduling, ProctorU, ClassMarker, Accredible, psychometric reporting. 866 unit tests at 94% coverage, written alongside the code, not after. This is where the discipline came from.
-
The year AI-assisted development moved into daily practice — but at this point it meant Copilot completing lines in the editor and ChatGPT in another tab for the harder problems. No agent loops, no in-terminal coding partners. The model worked as a fast junior engineer whose every suggestion needed review; the testing discipline established two years earlier was what made that review tractable. Better tools were a year away.
-
Many forms, parallel work. wagtail-lms on PyPI in October — matrix-tested support across Django 4.2–6.0 and Python 3.11–3.14. A competitive RFP prototype in seven days: CFAS Portal MVP (bilingual Django, GeoDjango, Stripe, DRF). Three Omdena collaborations: Urban Tree Observatory (recognised as Lead ML Engineer for the 1M-record PostGIS bulk-load), VisionVitals, and CropCycle. And the IBM RAG & Agentic AI Professional Certificate, eight Coursera courses, completed Sep–Oct.
The toolchain shifted with the work. Claude Code went from API-billed-and-rationed to nearly daily once the subscription tier landed; Codex CLI joined the rotation and the chat-window tools dropped out of the coding loop. Today the split is Claude Code primarily, Codex for second-opinion reviews, and Copilot for PR review on GitHub.
-
QlubPro built out as a multi-tenant Django SaaS for tennis leagues with subdomain tenancy and ContextVar-scoped query isolation. CTCMPAO Learning Hub — a competitive RFP prototype in seven days: site crawling, PDF extraction, canonical knowledge documents, and a Wagtail-rendered practitioner-facing hub with SCORM and H5P embedding via wagtail-lms.
Module Two
A learning platform in disguise.
QlubPro is a tennis-club SaaS. Its architecture is the same shape as a modern LMS. Eight patterns, translated.
I haven't built a learning platform yet. I've built the same system for a different domain. The architecture transfers.
-
The dashboard surfaces only what's actionable for the visitor right now. It's the same design discipline a good learner home page needs: not a list of everything, but a short list of what to do next.
-
Permissions and content visibility branch on role at the model layer, not just the template. That's how an LMS keeps a senior leader's path clean of new-hire onboarding while still letting them drop in if needed.
-
The state machine is what matters: open → waitlist → approved → enrolled → completed, with the right notification at every transition. Same shape, different domain.
-
Both are constraint-satisfaction problems dressed up as scheduling. The hard part isn't the algorithm — it's the override and exception handling that lets a human intervene without breaking the model.
-
Submission → review → confirmation isn't just a sports rule, it's the structure of a feedback loop that respects the learner. The dispute path is what separates a real assessment system from a quiz.
-
Celery for the schedule, templates for the message, opt-out for the respect. The hardest part is restraint: every nudge that doesn't add value erodes the channel for the ones that do.
-
Visible progress and visible direction. A player should know where they stand and where they're headed; so should a learner. The data model is nearly identical.
Module Three
AI in practice — honestly.
Three projects. The first is the most polished; the others are prototype-scale. Together they show the trajectory and the discipline.
CTCMPAO Learning Hub — 7-day RFP prototype
For the College of Traditional Chinese Medicine Practitioners and Acupuncturists of Ontario: a working Django + Wagtail learning hub built in a week as part of an RFP response. Three layers: site crawling and PDF extraction, canonical knowledge documents with classification and chunking, and a Wagtail-rendered practitioner-facing hub with search and Standards-of-Practice links. SCORM and H5P content embedding via wagtail-lms. Portfolio prototype, not maintained.
QuGenAI and AI Roleplay Trainer
Two prototype-scale tools from 2025. QuGenAI generates quiz items from source documents; the Roleplay Trainer runs scenario-based conversational practice. Built with LangChain, the OpenAI API, and Streamlit. Proof-of-concept scale, real instructional-design thinking — the prompt structure is the lesson plan.
IBM RAG & Agentic AI Professional Certificate
Eight-course Coursera series completed in 2025. Coverage: LangChain fundamentals, multimodal generative AI applications, advanced RAG with FAISS and HNSW, vector databases (ChromaDB), LlamaIndex RAG, LangGraph agentic patterns (ReAct, Reflexion, tool calling), and multi-agent systems with CrewAI, AutoGen, and BeeAI.
A pause
Which of these patterns do you most need on your team right now? (The page will lean into your pick as you keep scrolling.)
Each club resolves at the request layer via subdomain; a Python ContextVar carries the tenant through the request lifecycle so every queryset is scoped automatically. The same pattern lets a single LMS host many client orgs without duplicate databases or special-case code.
The dashboard surfaces only what's actionable for the visitor right now. It's the same design discipline a good learner home page needs: not a list of everything, but a short list of what to do next.
Permissions and content visibility branch on role at the model layer, not just the template. That's how an LMS keeps a senior leader's path clean of new-hire onboarding while still letting them drop in if needed.
Both are constraint-satisfaction problems dressed up as scheduling. The hard part isn't the algorithm — it's the override and exception handling that lets a human intervene without breaking the model.
Submission → review → confirmation isn't just a sports rule, it's the structure of a feedback loop that respects the learner. The dispute path is what separates a real assessment system from a quiz.
Visible progress and visible direction. A player should know where they stand and where they're headed; so should a learner. The data model is nearly identical.
Module Four
Ask me anything (within reason).
Single-turn conversation, scoped to Felipe's work and approach to learning technology. Each question stands alone — there is no memory between asks. Pick a starter or write your own.
In closing
The page is the argument.
This site is the long-form version. The page above is the live version. If you're hiring for a role at the intersection of learning design and engineering, I'd like to talk.
Each club resolves at the request layer via subdomain; a Python ContextVar carries the tenant through the request lifecycle so every queryset is scoped automatically. The same pattern lets a single LMS host many client orgs without duplicate databases or special-case code.