Inspiration

The Spark of Inspiration

I stumbled upon a one-word speed reading app while procrastinating on finishing a book I'd bought months ago (ironic, I know). The concept was brilliant—showing one word at a time to force focus—but the execution frustrated me. It was locked at 300 WPM, and I couldn't upload my own books. I had to read whatever sample text they provided.

That's when the question hit me: What if users could actually control this?

What if they could:

  • Upload any book they wanted to read
  • Set their own pace (not some arbitrary 300 WPM)
  • Track real progress toward actual goals
  • Get feedback on whether they're improving

That frustration became Pace.


Building the Solution

I built Pace using Next.js 16 with TypeScript, choosing pdfjs-dist for server-side PDF parsing after testing several libraries. The first major challenge was text extraction—PDFs are messy with page numbers, headers, and inconsistent spacing, requiring aggressive text cleaning functions.

The reading engine displays words at precise intervals using $\text{Interval (ms)} = \frac{60,000}{\text{WPM}}$, but JavaScript timing isn't perfect, so I had to track actual elapsed time separately and account for pauses to calculate real WPM as $\text{Actual WPM} = \frac{\text{Words Read}}{\text{Active Reading Time (minutes)}}$.

Accomplishments that we're proud of

Getting AI to actually give useful feedback. My first attempt at AI coaching was terrible—it just said things like "Keep reading!" which helps nobody. After lots of trial and error, I figured out that being super specific with the AI works way better. Now instead of vague encouragement, users get real advice like "You maintained 180 WPM—try pushing to 220 next time."

Building a quiz system that understands meaning, not just exact words. This was the big breakthrough. If the correct answer is "The ocean represents mystery and fear" and someone writes "The sea symbolizes things we don't understand and are scared of," traditional systems would mark it wrong because the words don't match. But that's the same idea! I taught the AI to recognize when answers mean the same thing even if they're worded differently. It's like having a real teacher grade your work instead of a robot checking boxes.

Challenges we ran into

Major challenges included handling browser vs. server code conflicts (Opik uses Node.js fs module, requiring strict API route separation), improving quiz quality from 40% to 78% completion rate through iterative prompt refinement, and optimizing PDF parsing performance from 30+ seconds to under 5 seconds for 95% of books.

The result is a production-ready app that addresses the real problem: 67% of purchased books never get finished. Pace provides full user control, real accountability through comprehension testing, personalized AI coaching based on actual reading patterns, and comprehensive observability with every AI call monitored.

What we learned

The journey taught me that building with AI isn't just about calling an API, it's about engineering better prompts, measuring AI quality systematically, iterating based on data rather than assumptions, and solving real problems instead of just showcasing technology.

What's next for Pace

Future enhancements include mobile apps, social reading groups, adaptive pacing where AI detects struggle and suggests adjustments, and multi-modal support for scanned PDFs using Gemini Vision.

Built With

Share this project:

Updates