Inspiration
Growing up in a predominantly Asian community in America, I saw many friends, neighbors, and relatives navigate communication across languages. I realized that language barriers are not always about knowing the right words or grammar — sometimes, the hardest part is making sure an idea reaches another person clearly.
Writers often know exactly what they mean, but cannot see how a reader builds meaning from their words, causing for misinterpretation, especially among those who aren't native English speakers. As such, I wanted to create a tool that makes this invisible process visible.
What it does
Lucidthread shows writers where readers lose the thread of their writing — and why.
Instead of assigning a generic readability score, Lucidthread models how a reader's mental representation changes as they move through a paragraph. It tracks which entities remain in focus, identifies ambiguous references, detects abrupt topic shifts, and estimates moments where too much information competes for working memory.
The results are displayed through an interactive Reader Timeline. Each entity becomes a thread that strengthens when it is central to the discussion and fades as attention shifts away. A cognitive-load graph highlights where comprehension becomes more difficult and explains the linguistic reason behind each spike. Writers can edit their text and immediately see how changes improve the reader experience.
How I built it
I built Lucidthread using theories from cognitive linguistics and discourse analysis rather than relying on an LLM to judge whether the user's writing is proper.
The system combines coreference resolution, Centering Theory, entity tracking, ambiguity detection, given/new information analysis, and topic-shift detection to approximate how readers construct meaning. The application was built with Next.js, TypeScript, Tailwind, Framer Motion, and D3, with the entire analysis pipeline running locally in the browser without external APIs.
Challenges I ran into
The biggest challenge was translating theories about human comprehension into computational rules. Humans effortlessly understand context, attention, and reference, but computers require explicit definitions. I had to carefully design rules for when an entity remains active, when a pronoun becomes ambiguous, and when a topic shift disrupts coherence.
I also learned that a useful visualization requires balance. A reader's mental model is incredibly complex, so I focused on highlighting the moments where writers can make the biggest improvements rather than overwhelming them with information.
Accomplishments that I'm proud of
I am proud that Lucidthread does more than label writing as "good" or "bad." Every insight is tied to an interpretable linguistic reason whether that be a competing antecedent or an increase in cognitive load.
I am also proud that sophisticated discourse analysis can run entirely on-device. By keeping the system transparent and private, Lucidthread provides meaningful feedback without replacing the writer's own judgment.
What I learned
Building Lucidthread changed the way I think about writing. Good communication is about guiding another person's attention through a sequence of ideas.
I learned that many writing problems are actually problems of managing a reader's mental model, and that decades of linguistic research can become powerful tools when combined with modern computation.
What's next for Lucidthread
I hope to expand Lucidthread into a tool that helps people in different professional fields communicate clearly, including students, ESL writers, educators, and professionals creating technical documents.
Future versions could support longer documents, improve semantic understanding with lightweight in-browser models, and provide personalized coherence feedback for different audiences who want to improve their writing in different languages.
Built With
- accessibility
- compromise
- d3.js
- data-visualization
- edtech
- framer-motion
- linguistics
- natural-language-processing
- nextjs
- node.js
- react
- tailwindcss
- typescript
- vercel
- vitest
Log in or sign up for Devpost to join the conversation.