Clinical training,delivered online.
NDC Institute teaches Neuroprotective Developmental Care to health professionals and educators: breastfeeding, sleep, infant development and perinatal mental health. The task was turning a serious clinical curriculum into a course platform busy practitioners could actually get through.

01 — The problem
The audience is health professionals studying between shifts, often on a phone and often interrupted. Long-form clinical content has to be broken into pieces that survive being put down mid-lesson and picked up days later.
It also has to feel credible. Practitioners are paying for professional education, so the platform has to read as authoritative rather than as a marketing site with videos bolted on.
The real constraint
Learners are professionals with no spare time. If they lose their place, or can't tell what's left to do, they stop coming back.
02 — My role
Fullstack developer on the platform, building the course experience and the data model behind it alongside design and product.
Course, lesson and enrolment interfaces
GraphQL API work for content and progress
Schema design for courses, modules and users
Responsive, accessible front-end build
Problems I found and fixed
03 — bugs I caught, and what I changedCourse structure and product direction came from the team. These are problems I found in the code and the fixes I shipped.
01
Terms couldn't be edited without a deploy
The terms and conditions page was 370 lines of hardcoded JSX. Every wording change needed a developer and a release. I replaced it with a fetch from the article service, keyed by an ID in config, so the content team edits it in the CMS like any other article.
02
Fonts silently stopped loading
Montserrat was pulled in with a CSS @import in the shared typography partial. Turbopack strips @import rules when it bundles, so the font quietly failed across every app with no error to follow. I moved it to a link tag in each app's layout, with preconnect, so all three load it the same way.
03
Finding a practitioner meant scrolling
The practitioner directory had no way to search by name, so anyone looking for someone specific scrolled the list. I added public search and autocomplete endpoints on the practitioner controller, filtered to the accreditation and maintenance programmes so only qualified practitioners come back, with a minimum query length so a single keystroke does not scan the table.
04
Completed work still looked outstanding
Required activities carried a red asterisk to mark them as mandatory, but the marker stayed after completion, so finished modules still read as something left to do. I scoped it to incomplete activities and reduced its size so it reads as a marker rather than an error.
04 — How it’s built
- Front end
- Next.js · TypeScript · Sass modules
- API
- NestJS · GraphQL
- Data
- Relational schema via Prisma
- Content
- Courses, modules, lessons, media
- Quality
- Semantic structure, keyboard paths, responsive
05 — What made it hard
Educational platforms fail in quiet ways. People simply don't finish. Most of the care went into the parts that keep someone moving through a course.
- Long-form content
- Clinical material broken into lessons that stay coherent when read out of order.
- Progress & state
- Where a learner is, what's next and what's done, visible at every level.
- Mixed media
- Video, text and downloads presented consistently rather than per-lesson improvisation.
- Credibility
- Typography and hierarchy that read as professional education, not marketing.
06 — What I’d do next
It is moving. NDC Institute is being folded into possums.org. That was marketing's call, for SEO and a single brand. I am building the professional side of Possums that will host it: the accreditation pathway, course and purchase pages, guest speakers and the professional dashboard. The Education Hub follows after that.
The obvious next step is richer assessment and certification, because practitioners want evidence of completion they can show an employer or professional body.
After that, analytics on where learners stall. Completion data tells you which lesson needs rewriting, and right now that's guesswork.