Sutur

Blog · Behind the scenes

Fanar: how Sutur picks your next book, with plain arithmetic and no AI

Fanar means lighthouse: the small system that lights the way to your next book, built from book data and honest counts, and measured against a baseline.

· 5 min read

In short

  • Fanar suggests the next book from what a book is about, who wrote it, and what readers actually finished. It uses simple weighted arithmetic: no language model, no embeddings, no trained ranker.
  • Every suggestion says why it is shown, and every number behind it can be printed and checked by hand.
  • It is measured, not assumed: a small group of readers gets a plain baseline instead, and we compare tap rates with honest confidence intervals.

Why a lighthouse

Fanar (فنار) is the Arabic word for lighthouse. A lighthouse does not tell a ship where to go. It shows what is there, so the captain can choose. That is the job we want for suggestions: help a reader see the next good book, not push them toward one.

Large sites use huge models trained on billions of clicks. Sutur has a few hundred books and a small, growing group of readers, so a trained model would mostly learn noise. We chose the opposite: use what we already know about each book, add simple counts of what readers do, and keep every step visible.

Step one: how close are two books?

Every pair of books gets a closeness score from 0 to 1, built from seven parts that we can show separately. The biggest are the author, the series, the genre and the words of the summary. The words are compared with a classic method (TF-IDF): a word that only a few books use, like “lighthouse” or “anthropology”, counts for more than a word half the library uses. Arabic is normalised first, with no diacritics, one form of alef and yeh, so spellings of the same word match.

The genre part is careful about what “same genre” means. A book labelled Anthropology and one labelled Community development both sit on the broad shelf “Society and culture”. Same label counts fully; same shelf only in part. That keeps an anthropology book near other anthropology books first.

What makes two books close
  • Same author28 % of the score
  • Same series22 % of the score
  • Same genre20 % of the score
  • Similar words in the summary20 % of the score
  • Reading level5 % of the score
  • Age rating3 % of the score
  • Length2 % of the score

These weights are kept in one place and tuned by hand against a test, not learned.

Step two: what did readers actually do?

For each reader and book we combine what they did into one number: finishing counts most, then how far they got, then highlights, notes and downloads. A like adds a little, a dislike subtracts a lot, and so does saying “Not for me” at the end of a book. Opening a book and leaving it alone for weeks is a mild “no”. Older reading counts less than recent reading.

We also count readers who finished both book A and book B. That signal stays silent until at least five readers share a pair, which is a privacy floor as much as a quality one: no one’s history is ever shown to someone else.

Step three: a row of different suggestions

Our first version took the four closest books. The result looked like four copies of one idea, all labelled “Same kind of book”. Readers feel that, and they stop trusting the row.

Now a row takes the best book of each kind in turn, and says which kind it is. The reasons name the book or the genre, so they read like a person talking: “Because you finished …”, “Also by …”, “More in Anthropology”, “A shorter read in …”, “A hidden gem”. The extra kinds rotate daily among their top few, so the row is not frozen.

The kinds of suggestion
KindWhat it means
Same series or authorThe next volume, or more by someone you finished
Readers also finishedPairs that enough readers finished together
A similar storyClose in the words of the summary
More in a genreThe same label on the book itself
Most finishedThe books readers finish most in that genre
A hidden gemFinished by a high share of its few readers
A shorter readSame genre, much shorter than this book
NewRecently published in a genre you like
Something differentOne pick from outside your usual genres

Rules that are never learned

Some things are fixed rules, not scores. A book you already finished or voted down is never suggested. Books rated 18+ are not suggested to anyone who has not passed the age check. Coming-soon books are not offered as readable. No row has more than two books by one author. A reader can turn personalised picks off, or press “reset my taste”, and the reading history itself stays untouched.

Cards use only what the book page already shows. A suggestion never reveals a spoiler.

Measuring it, honestly

A suggestion row counts as shown only after at least half of it was on screen for a second, and a tap always counts. We compare tap rates with a 95% interval, and a rate is not shown at all until a row has about thirty impressions. Until then the table says “too few”, because a rate from six impressions is not a rate.

About one in twenty signed-in readers sees a plain baseline instead (the most finished books, same hard rules), so we can tell whether Fanar beats “just show what is popular”. We also run an offline test: hide each reader’s last finished book and check whether it appears in their top ten. We will ship changes only when they clearly beat the baseline, and we will say when they do not.

What is next

Early numbers are small, and we would rather say so than invent a result. As more readers finish more books, the reader signals will count for more and the metadata for less. The first test of the new mixed rows is simple: do readers tap different kinds, and do the rare kinds, like hidden gems, earn their place?

Fanar has no AI by design. If we ever add a learned ranker, it will have to beat this plain version on the same measurements, and we will publish that comparison.

Tech notes

  • SimilaritySeven weighted parts (author, series, genre, summary words, level, age, length); TF-IDF cosine over titles and summaries in both languages, Arabic normalised
  • Reader signalOne score per reader and book from finishing, progress, highlights, notes, downloads, votes and the end-of-book reaction; older reading counts less
  • Readers also finishedPair counts, shown only when at least five readers finished both
  • VarietyOne book per kind of suggestion in turn; at most two books per author; extra kinds rotate daily
  • MeasurementImpressions counted when seen; 95% Wilson intervals; a rate is hidden under about thirty impressions; a 5% baseline group; an offline leave-last-out test
  • CodeOpen source, MIT, in the Sutur repository

Try it yourself

  1. Collect, for each book, an author, an optional series, a genre label and a summary.
  2. Score each pair as a weighted sum of: same author, same series, same genre, TF-IDF cosine of the summaries, and small parts for level, age and length.
  3. Give each reader one score per book from finishing, progress and votes, and suggest books close to the ones they scored highest.
  4. Build each row from several kinds of suggestion, one book per kind in turn, and write the reason in words.
  5. Log impressions and taps, keep a small baseline group, and report rates with intervals.