MSc dissertation
Design, build and evaluation, solo
Rebuilt mid-project when the structure turned out to be wrong.
A study app that turns your reading into summaries, flashcards and a map of how it all connects.
Try the live site (opens in a new tab)
- 11usability issues found, all fixed
- 98%less script on the slowest page
- 85 to 92Lighthouse score on that page
Built with React, TypeScript, Vite, CSS tokens, IndexedDB and D3.
The problem
You forget most of what you read within days.
Distill began as a real product idea for that problem. Testing recall on real people would have needed a full ethics application that didn't fit an MSc timeline.
So I reframed the evaluation around what I could measure properly: usability, performance and correctness. A scope decision, argued and defended.
The decision that changed it
From a page per task to one place you never leave.
Partway through the build I decided the multi-page plan fought how someone actually works inside their notes, and redesigned the structure. It cost time mid-project. It was a deliberate call driven by how the app is used.
None of it would have shown up in a quick click-through.
Evidence over instinct
11real problems, found by using it properly
I checked all five core flows against Nielsen's ten heuristics and rated each issue by severity. One example: the progress dashboard showed 71% "mastery" for notes with no reviewed cards. Another: there was no way to delete a note at all.
A separate pass with hostile input found a stored XSS hole, where pasted rich content went into the page unsanitised. I fixed it in two layers and proved it closed by reopening the infected note.
All 11 were fixed and re-checked in the running app.
A design system that holds
Forty-four stray colours, moved onto tokens.
Colour, spacing and type live as CSS custom properties. I found more than 44 places across 20 files quietly using raw colour values, which meant dark mode silently missed large parts of the app.
I migrated them file by file. Text size and reduced motion are real settings too, and they can override the operating system instead of only mirroring it.
Performance shaped the design
Two small charts were costing 110KB.
A Lighthouse pass showed one page missing the target because of a charting library too heavy to trim. I replaced it with a small hand-built chart, checked side by side against the original.
What I took from it
The real problems only appeared when I used it the way a person would, and the way an attacker would.
Neither the usability issues nor the security hole would have appeared in type-checking, linting or a demo run. I also built a benchmark of 20 documents across three subjects to score the summaries against reference text, because "the feature works" needed a number behind it.