A lecture is one of the most common ways we learn, and one of the least accessible. A student who is deaf can't follow the audio. A student who is blind can't read the slides. A student with a cognitive or attention difficulty may struggle with a 60-minute recording and no summary.
Accessibility tools exist for each of these problems, but they are usually separate products. I wanted to see how far one pipeline could go, so I built AccessLearnAI: upload a lecture, and get back a transcript, a concise summary, spoken audio, and Braille output.
This post covers how it's built, the problems I ran into, and what I'd change.
Students need different formats of the same content. So instead of building one feature per disability, I built one pipeline that produces every format from a single input:
Whisper (speech to text) → T5 (summarization) → edge-tts (text to speech) → Braille generation Each stage feeds the next:
The system is split into three layers:
I used Fast API because the ML code is in Python, and it let me expose each pipeline stage as a clean API endpoint without a translation layer between the models and the web service.
The pipeline works fine on a development machine. Production was a different problem.
When I deployed the backend to Render's free tier, it kept running out of memory. The cause was that Whisper and T5 were both loaded into memory at the same time, and together they went over the free tier's limit.
This was a useful lesson
A model that works locally can still be unusable in production because of resource limits. Deploying an ML system means managing memory as carefully as you manage code.