Booktrail — One Book Leads to Another

Inspiration

Booktrail started from a personal problem: I have accumulated a long reading history, but that history mostly works as an archive of what I have already read.

I use Booklog, a Japanese reading log service where readers can build a virtual bookshelf, record their reading status, rate books, and write reviews. Over time, Booklog can contain a rich record of a person’s interests and reading habits. However, when I want to choose my next book, I still have to search manually, browse rankings, or rely on generic recommendations.

Those methods can suggest popular books, but they do not necessarily understand what I enjoy, what I am likely to finish, or what could expand my interests in a meaningful way.

I wanted to turn my existing reading history into something more useful: a map that leads from one book to the next.

That idea became Booktrail.

One book leads to another.

What it does

Booktrail imports a reader’s Booklog history and uses it to recommend books based on their interests, reading patterns, and current goals.

Booklog is widely used in Japan to record books that people have read, are currently reading, or want to read. Booktrail adds a new layer on top of that personal history: it uses past reading activity to help the reader decide what to read next.

The end-to-end prototype allows a user to:

  1. Upload a Booklog CSV export
  2. Import and normalize their reading records
  3. Generate a reading profile from completed books, ratings, authors, genres, and tags
  4. Choose a goal for their next reading experience
  5. Receive personalized book recommendations
  6. See a human-readable explanation for each recommendation
  7. Provide feedback such as “Want to read,” “Maybe later,” “Not for me,” or “Already read”

Instead of presenting one undifferentiated ranking, Booktrail organizes recommendations into three groups:

  • Likely to Love — books closely aligned with the reader’s established interests
  • Easy to Continue — books that appear compatible with their previous completion patterns
  • Broaden Your World — books connected to their interests but outside their usual choices

The goal is not only to find the most similar book. It is to help the reader choose a book they will actually start, finish, and learn from.

Educational impact

Although Booktrail began with my own reading needs, I believe it also has meaningful educational potential.

Choosing a book is part of learning. Readers need to balance several factors: curiosity, difficulty, prior knowledge, time, and the desire to explore something new. A recommendation system focused only on similarity or popularity does not fully support that decision.

Booktrail is designed to encourage:

  • Sustained reading habits
  • Reflection on personal interests
  • Gradual and achievable reading challenges
  • Discovery beyond familiar authors and genres
  • Independent book selection
  • Learning driven by curiosity rather than obligation

For students, the best next book is not always the easiest book or the book most similar to what they have already read. It may be a book that connects a familiar interest to a new subject, introduces a different cultural perspective, or offers a manageable step toward more advanced reading.

The three recommendation categories are intended to support that balance:

  • Likely to Love builds motivation through familiar interests.
  • Easy to Continue supports continuity and successful reading experiences.
  • Broaden Your World encourages exploration and intellectual growth.

Booktrail does not attempt to assign a fixed “reading level” to a person. Instead, it uses past completion patterns and the reader’s current goal to suggest books that may be appropriate for that moment.

In the future, this approach could support students, teachers, librarians, and reading communities. It could help learners develop not only a longer reading list, but also the ability to understand their own interests and make intentional reading choices.

How I built it

Booktrail is built as a web application that connects several different technologies into one recommendation pipeline.

The application imports Booklog CSV data and converts each reading record into structured information such as:

  • ISBN
  • Title
  • Author
  • Rating
  • Reading status
  • Tags
  • Registration date
  • Completion date

Book metadata is then normalized and used to create a reader profile. Completed and highly rated books receive more weight than unread or low-rated books.

For recommendation retrieval, I adapted ideas from QMD, a local search engine that combines:

  • BM25 keyword search
  • Vector-based semantic search
  • Query expansion
  • Candidate fusion
  • Model-based reranking

In Booktrail, a QMD document represents one book, while the search query represents the reader’s profile and current reading goal.

The system expands the reader profile into multiple recommendation intentions. For example:

  • Find books similar to the reader’s highest-rated books
  • Find books with a similar level of reading commitment
  • Find books that connect an existing interest to a new subject

The candidates are retrieved using both lexical and semantic search and then reranked.

For Japanese and multilingual book data, the prototype uses a multilingual embedding model rather than relying only on an English-optimized model.

The final ranking considers more than semantic similarity. Conceptually, it combines several signals:

$$\text{score}=0.45r+0.20p+0.15g+0.10n+0.10d$$

where:

  • (r) is the reranker relevance score
  • (p) is compatibility with previous reading patterns
  • (g) is compatibility with the current reading goal
  • (n) is novelty
  • (d) is diversity

The exact weights can be adjusted as more user feedback becomes available.

Challenges

The biggest challenge was integrating technologies that were designed for different purposes.

QMD is primarily designed for searching documents, not recommending books. I had to reinterpret its architecture so that each book became a searchable document and each reader profile became a structured query.

Another challenge was connecting the web application with local GGUF models for embedding, query expansion, and reranking. The application needed to handle model loading, indexing, command execution, and failures without making the user experience fragile.

Japanese book metadata also introduced practical issues. Titles, authors, ISBNs, descriptions, and categories are not always complete or consistently formatted. Recommendation quality depends heavily on this metadata, so normalization and fallback behavior became important parts of the prototype.

There was also a product-design challenge: a recommendation can be highly similar and still be unhelpful. Ten books by the same author may be accurate, but they do not help a reader explore. This required adding diversity, novelty, previous-reading exclusions, and recommendation categories on top of the raw search scores.

Finally, recommendation explanations had to be understandable without exposing technical scores. A message such as “the vector similarity was 0.84” does not help a reader make a decision. Booktrail instead explains recommendations using recognizable facts from the reader’s history.

What I learned

The most important lesson was that search and recommendation are related, but they are not the same problem.

Search answers:

Which books are relevant to this query?

Recommendation asks:

Which of these books is the best next choice for this particular person?

Embedding search is useful, but it is not enough by itself. Keyword retrieval helps preserve important details such as authors, series, historical periods, and specific topics. Reranking helps compare candidates more carefully. Diversity and reading-pattern signals are then needed to turn relevant search results into useful recommendations.

I also learned that local models can be practical for a recommendation prototype. They reduce dependence on remote APIs and make it possible to keep personal reading history closer to the user’s environment.

Most importantly, I learned that recommendation quality should not be measured only by clicks or similarity. For Booktrail, better questions are:

  • Did the user find a book they genuinely wanted to read?
  • Did the recommendation feel understandable?
  • Was the book realistic for them to finish?
  • Did it introduce something they would not have discovered alone?
  • Did it encourage the reader to continue reading?

Accomplishments

I am especially proud that the prototype works as an end-to-end experience rather than only as an isolated recommendation experiment.

A user can move from a real reading-history export to a generated profile, personalized recommendations, explanations, and feedback within one application.

I am also proud that the project treats privacy and user control as part of the design. Booktrail does not require scraping large numbers of public Booklog profiles. It starts with data deliberately provided by the reader.

The prototype also demonstrates that personal reading records can serve a purpose beyond archiving. They can become inputs for reflection, discovery, and continued learning.

What’s next

The next major step is to evaluate the different recommendation methods with real readers.

I want to compare:

  • Vector-only recommendations
  • Hybrid keyword and semantic retrieval
  • QMD-style retrieval with reranking
  • A future education-focused hybrid model

As more users explicitly contribute their reading histories, Booktrail could also add item-to-item collaborative filtering:

Readers who enjoyed this book also tended to enjoy these books.

That would allow Booktrail to combine two different forms of knowledge:

  • What books are about
  • How real readers move from one book to another

Future versions could also include:

  • Library availability
  • School or classroom collections
  • Long-term reading habit analysis
  • Age-appropriate and language-level signals
  • Teacher or librarian recommendation tools
  • More adaptive recommendations based on feedback

Booktrail began as a way to solve my own difficulty choosing what to read next. The larger opportunity is to help readers turn everything they have already read into momentum for what comes next—and to support reading as an ongoing process of enjoyment, discovery, and learning.

Built With

Share this project:

Updates