Luminara
An app that makes academic reading accessible. Upload a PDF, slides, a Word doc or even a photo of a page, and Luminara finds the hard parts, rewrites only those with a local AI model, and hands the file back in its original format. I led the backend.

Upload and choose. Pick an output format, a language and a page range, then turn on dyslexia-friendly mode, text-to-speech or simplification.
Convert and download. A real speech-outline PDF goes through the backend, comes back as clean text with its structure kept, and downloads as a file again.
It's not the student. It's the text.
Students struggle with academic reading not because they lack ability, but because the content isn't accessible. Three groups feel it the most.
Dense text
Long sentences and complex vocabulary overwhelm any reader.
ESL students
International learners face an extra language barrier on every page.
Dyslexic learners
Dense paragraphs make comprehension significantly harder.
Simplify the hard parts. Keep the rest.
Luminara doesn't rewrite the whole page. It flags only the difficult words and phrases, replaces those, and leaves everything else exactly where it was. Tap a highlighted word to save it to your dictionary.
Learn, don't just simplify. Each entry has a part of speech and a clear definition, and the dictionary grows with the reader.
From a sketch to a seven-step pipeline.
This is the real sketch I drew for the backend. The idea that shaped everything is in step four: no full generation, only flags. The AI never gets to rewrite the whole document.

Upload
PDF, slides or Word doc, with an edge check on the file.
Extract text
Parse the file, save its type, convert to one common format.
Identify & flag
Find what's hard: for dyslexia, for language learners, or what the user asks.
Modify flags only
Keep the theme. No full generation. Output replacements for flagged spans.
Rebuild
Create the full text with the flags replaced.
Revert file type
Reverse step two, so the output matches the input format.
Output
Download, rasterize if needed, and delete the user's file.
The engine underneath the app.
I was the main backend developer: the Flask server and everything it does with a file. I also helped teammates write their code and design in Figma, so the whole team could ship together.
Any format in, same format out
PDFs, slides, Word docs and photos of pages, with OCR for images, converted to text and back again.
Find what's hard
Readability scoring and word-rarity checks flag difficult spans before any AI runs.
Rewrite only the flags
A local llama3 model replaces just the flagged spans, guided by the reader's saved words.
Accounts that hold up
JWT sign-in that blocks disposable emails, caps password length against malicious input, and rate-limits login attempts.
Personal dictionary
Save, list and delete words with their part of speech and definition, tied to each user.
One-command setup
Frontend, backend and the AI model all start together with Docker Compose.
Users told us it was too simple. So we changed the goal.
After the demo, people liked the idea but said the output lost important meaning, and they wanted help understanding hard words, not just removing them. We shifted from shortening text to helping people understand it.
WHAT WE HEARD
WHAT WE CHANGED
Real textbooks, not sample data.
We tested with real textbooks from our own classes across several subjects, checking both readability and whether the meaning survived. Real text exposed problems sample data never would.
Unreliable readability scores
Flesch-Kincaid scores swung with text length, causing over- and under-flagging.
Keeping the layout
Headers and titles had to stay in place while still being simplified when needed.
Frontend ↔ backend
CORS and port issues between React and Flask, including the dictionary calls.
We limited how much we used AI. Cheaper, greener NLP does the flagging, and a local model does only the rewriting, so documents never have to leave the machine.
Built together, shipped together.
I led the backend and treated Luminara like my own project, but it wouldn't exist without this team. Thank you for the support from the first sketch to the final demo.
SLA Copilot
When a service goes down, who gets their money back?