Parth Dhanani

Instructional Designer and Learning Engineer

I design the lesson, and I build the pipeline that ships it.

Eight years in eLearning, eleven in production overall. I lead the SCORM team at Kidvento that has shipped 100+ K-12 modules, and I build the tools that keep those lessons playable on slow school networks.

Replies come from me, usually within a business day.

Parth Dhanani
8
people on my team
2
OSS tools with full test suites
1
sample lesson you can play right now

100+1

K-12 modules shipped

62

languages from one master file

4h to 10m3

per-package publishing effort

3 to 14

visual revision rounds

1. Team output at Kidvento, not a solo count. I lead the eight people who ship them, and I build the pipeline they ship through.

2. Hindi, Tamil, Kannada, Punjabi, Gujarati, Telugu. Plus Hindi and French video at Kidvento without re-recording on camera.

3. Measured on a clean Storyline package. Before the tool, anything QA sent back restarted the four hours. That restart is why the tool exists.

4. At Learning Owl, after replacing manual asset handoff with an Illustrator to Storyline workflow built off the storyboard.

Selected work

The receipts, including what didn't work

Four problems I shipped fixes for. Each one lists the dead ends next to the wins, because the dead ends are where the judgement lives. Full write-ups are one click away.

What worked

  • Three questions before any content. "Imagine the training worked. What is a person doing six months later that they wouldn't be doing otherwise?" Asked until a behaviour appears, not a topic.
  • Branching scenarios that mirror the calls people actually get wrong on the job, in place of policy recall.
  • The SME as co-author. Getting to the behaviour together turns the subject lead into a partner, not a content source.

What didn't

  • Accepting a PowerPoint or a 90-minute brief as the starting point. The first answer is always "they would know X," and knowing is not a behaviour.
  • Slides of facts with a quiz at the end. People pass the quiz and change nothing on the job.

The same process now drives every compliance course I build. Read the design notes

What worked

  • Three FFmpeg variants per video (320p, 480p, 720p), all inside the SCORM zip. Nothing for a school to install or configure.
  • A bandwidth probe at course launch picks the tier, and the player swaps the video source before playback starts.
  • Storyline-compatible. A pre-publish step, so authors keep their tool and manage one source video per slide.

What didn't

  • Compressing to a single low-resolution master. It fixed the buffering and ruined the lesson for every school on a good connection.
  • HLS with a CDN, the textbook answer. Target schools often block or drop external traffic, and I'm not asking every IT admin to reconfigure their LMS.

Tested against self-hosted Moodle on an ARM free-tier box, throttled to match the real networks. Read the build

What worked

  • A Node CLI that patches the manifest, injects the LMS reporting hook, and fixes Storyline's completion-status flag, the same way every time.
  • An interaction-ID auditor that fails the build on duplicate IDs, instead of letting a learner ticket surface it two weeks later.
  • A deterministic re-zip, so the same input produces the same package and diffs mean something.

What didn't

  • The eight-step manual checklist it replaced. Fine at 10am, unreliable at 6pm, and anything QA sent back restarted all four hours.
  • Asking people to be more careful. The checklist items that got skipped were the boring ones, which are exactly the ones a script never skips.

The team got most of a day back every week. Read the build

What worked

  • Instrumenting the SCORM API wrapper to log every call, then watching two learners reproduce the freeze live.
  • Reading the spec. The log showed cmi.interactions.N.id written twice; the SCORM 1.2 RTE says the second write must be rejected, and the LMS was right to reject it.
  • Fixing the duplicate write in the player patch, and adding the uniqueness check to the build pipeline so the class of bug is gone, not just this bug.

What didn't

  • Re-publishing from Storyline. Clearing school caches, which helped just long enough to look like a fix.
  • Blaming the LMS while the LMS team blamed Storyline. "The LMS is being weird" is where this bug hid for weeks.
  • Replacing the affected interactions one at a time. It never reproduced in QA, because QA's network wasn't losing the race.

This one is why my tools now audit at build time. Read the diagnosis

The craft

I storyboard before I build

Every module starts on paper, not in Storyline. The storyboard is where the teaching decisions get made and argued, before a single screen is built. It is also where I align the SME, the visual designer, and the developer on one plan.

At Learning Owl I replaced manual asset handoff with an Illustrator to Storyline workflow built off the storyboard.

Visual revision rounds went from three, to one.
Brief and needs analysisWhat should change on the job?
Storyboard, on paper firstThe teaching decisions, argued before any screen exists.
Build in StorylineScenarios, knowledge checks, accessibility.
QA and shipLMS tracking, six languages, then ship.
Client storyboards are shared on request. For something you can open right now: play an original 8-slide sample lesson, written as a Markdown storyboard and compiled with my own Storycraft toolchain. It scores 100/100 on scorm-kit's build report, and the SCORM 1.2 zip is yours to drop into any LMS.

How I think

Most training fails before a single slide is built, by answering "what should we cover?" instead of "what should people do differently?"

Begin with behaviour

If the honest answer to "what changes?" is nothing, I say so, and suggest what would actually help.

Rehearsal over slides

A scenario that mirrors a real decision beats a slide full of facts. People remember what they practised.

Experts as partners

The SME knows the content. My job is asking the questions that surface what a learner actually needs.

Design for everyone

Slow networks, screen readers, keyboard-only, six languages from one master. Anything less is half a lesson.

The differentiator

Six languages, from one master file

Localization is where most eLearning quietly breaks, and where I have spent years. Translated scripts run longer than the English source, so narration and animation fall out of sync. Numerals, registers, and reading direction all shift. Fixing it is design work: narration re-timed, register adjusted, every language QA'd on its own.

Most of what I believe about this I learned by getting it wrong once. We accepted a translator's Word doc instead of a locked structured file, a row got skipped during paste, and a module shipped with two languages on the same slide. The file format has been non-negotiable since.

I have run full multilingual delivery across six Indian languages, managing translator handoff, audio re-sync, and per-language QA, then built a Flask tool that moves quiz text between storyboard, Storyline, and translation docs so the same edit does not get retyped six times.

HindiTamilKannadaPunjabiGujaratiTelugu
  • Re-syncNarration and animation timed back to each translated script, not the English original.
  • RegisterThe formality and tone a learner expects, language by language, not a literal translation.
  • Length firstLayouts designed for the longest target language. Tamil decides the button width, not English.
  • One edit, onceA Flask tool parses Storyline XML so a quiz edit moves between storyboard, Storyline, and translation docs without retyping.
  • QA per languageEvery variant verified for tracking, layout, and accessibility before it ships.

How I work in 2026

AI as production capacity

AI drafts and accelerates the production work; I direct and verify it. The judgement about what a learner needs stays human.

VideoHeyGen for multilingual video in Hindi and French, without re-recording on camera.
NarrationElevenLabs for audio narration across language variants.
ToolingSmall AI-assisted scripts that remove the dull, error-prone steps from publishing.
ResearchNotebookLM to compress source material before a build starts.

The engineering edge

An instructional designer who ships his own tools

More eLearning content is AI-generated now, and build-time checks have not kept up with it. So I built the checks, and the glue, I was missing.

scorm-kit

9 build-gate commands, 31/31 tests, 0 deps

Born from six months of SCORM postmortems. Lint, a11y, privacy, cmi5 and a one-shot report that scores a package 0 to 100 before upload, catching the silent failures Storyline ships and Moodle surfaces as a learner ticket two weeks later, caught at build time instead. CI-ready exit codes.

View on GitHub

xapi-doctor

30 spec-cited rules, 17/17 tests, 0 deps

26 xAPI 1.0.3 rules + 4 cmi5, each mapped to a section of the spec. Turns an opaque LRS "400 Invalid request" into the exact field that's wrong, and tells you whether the LRS itself is healthy.

View on GitHub

Storyboard Sync

Live tool, one edit, six languages

One quiz edit, applied across the PPTX storyboard, the Word translation docs, and the Storyline .story file, so a fix isn't retyped six times for six languages. Runs in the browser; uploads auto-delete after 30 minutes.

Open the live tool

Experience

Eleven years, from craft to lead

2025 to now

KidventoLearning Engineer and SCORM Team Lead. Leading eight people, 100+ K-12 modules shipped.

2023 to 2024

Learning OwlInstructional Designer and eLearning Lead. Compliance, POSH, induction, and soft-skills courses, SME to LMS.

2019 to 2022

Learning LozixeLearning Developer. 300+ activities for the Balbharati K-12 curriculum, six-language localization.

2018

LionbridgeLocalization Integrator. Adapted global eLearning for Indian and Southeast Asian markets.

2015 to 2017

FreelanceContent, scripting, and animation. The visual foundation the later work is built on.

Fair questions

The things you'd ask on a call anyway

Answered here so the call can be about your problem instead.

Are these numbers real?

Yes, and the footnotes at the top say how each one is counted, including which are team numbers rather than solo ones. The tool claims are checkable without trusting me: the test suites are public on GitHub, and the sample lesson's build report is downloadable. Happy to walk through any of them on a call.

Did AI write your tools?

AI drafts a lot of the code; I specify, direct, and verify it, which is why every tool ships with a full test suite and deterministic builds rather than a demo GIF. I think that division of labour is simply what production work looks like in 2026, and I'd rather show you the tests than pretend the drafting was artisanal. The judgement about what a learner needs is not delegated.

Can we see client work?

Client modules belong to clients, so they're shared privately on request, not posted here. What you can open right now: the 8-slide sample lesson built end-to-end with my own toolchain, the Storycraft playground, and the case studies, which describe real production work with the client names removed.

Why hire an instructional designer who codes?

Because the expensive failures live in the gap between the two jobs. The freeze bug above sat for weeks while the content team blamed the LMS and the LMS team blamed the authoring tool. Someone who speaks both sides read the API log and the spec, and closed it. That gap is where I work.

Remote, really?

Yes. Based in India, used to async work across time zones, and flexible on overlap hours. Storyboards, build reports, and written design notes are how I work anyway, which is most of what remote collaboration needs.

If a course is slow to ship, breaking in odd ways, or changing nothing, we should talk.

Open to remote instructional-design and learning-engineering roles, anywhere.