This is a submission for the Hacktoberfest Weekend Challenge: Build for a Friend
What I Built
Well, I never thought of it but one of my friends had been wanting to get into reading books but she has this strange fear that if the first book she chooses to start her reading journey, turns out to be boring then it'd convince her that she is not a reader.
This is what she exactly told me - "I am just worried that one bad book would convince me that I'm not a reader and I'd never try another. So I never even tried starting because of this fear. Also there are so many choices that I'm confused which book to start with."
So I thought, instead of telling her "just pick a book, start reading and if it bores you then start reading another!" I thought I could certainly help her make an easier choice by building VibeLivre.
So VibeLivre is a low-pressure first-book picker designed for people who want to start reading but don't know what to pick.
Not only this, since she's a regular college student like me, I kept in mind that with a busy college schedule, the thought of committing to a 400 page book might make it even harder for her to begin. So I have designed the app around such constraints too.
You just have to tell it:
- what kind of vibe/genre you like
- how many pages that book has
- how many minutes a day you can give to reading
- the cost of the book or whether it is freely available or not!(ofcourse, being a college student myself, I had to keep in mind the cost as well! )
So the idea is pretty simple :
You don't have to become a reader before you start reading. You just need to find one book that makes you want to turn the next page.
Demo
https://drive.google.com/drive/folders/1NGdoS5f1mYRjDPJ1m3EUHWErVTbqPgBv?usp=sharing
https://vibelivre.streamlit.app/
A quick note about the live link: It runs on Streamlit's free hosting, which can't run Ollama. The full version with Gemma running on my own laptop is what you can see in the video. You can also run it yourself by following the README.
Code
https://github.com/alsopayalll/VibeLivre
How I Built It
So before starting I had this thought that anybody could literally ask any LLM to suggest them a book, but I knew that I had done it before and what LLMs do is that they guess the most likely words that match your request. Because of this, they can confidently invent fake book titles and make up completely wrong page counts/prices and this is called hallucination. It is one of the most well documented limitations of LLMs.
So instead of handling everything to AI, I made a curated list of around 150 books that includes some of my suggestions that I have actually read and rest of them are internet suggestions.
The data contains :
- Title and author
- Page count
- Cost (free/cheap)
- Vibe tags like thriller, funny, spooky,etc.
- A short, spoiler-free hook
I tried to include different styles and authors too, because when you're completely new to reading, you don't even know what you like yet. So I wanted her to have a few directions to explore.
Next, after the dataset was complete, I built a simple Python matcher file that removes the books that don't fit the user. For eg. The app takes no. of pages of the book as input, so if the user has set a maximum page limit of 250, any book above 250 pages is removed from the list.
I also added a cost filter, so if the user wants only free books, the matcher removes all the books that aren't marked as free.
Once these basic filters are applied, the books that are left are given a score based on how well their vibes and hooks match with that of the user The better the match, the higher the score.
Then comes the AI part. Here only the filtered books go to the model. The interesting part is that it will not search the internet or come up with its own ideas. It will just pick 3 books from the list I gave it and explain in a friendly way, why each one might work for her.
Since it can only choose from books I've already checked, it can't make anything up.
The reading planner is simple. It tells you pages per day → number of days → estimated finish date for that book
The tech stack:
- Gemma (gemma3:4b) for recommendations
- Ollama to run to the model locally
- Python for filtering, scoring and reading plan logic
- Streamlit for UI
Things that didn't go smoothly:
Honestly, a lot of this project was me fixing small things that broke
1. Building the book list took forever.
I started with books I had read myself and added suggestions I found online. But I couldn't just paste them in. For every book I had to check the page count, decide if it was easy enough for a first-time reader, mark whether it was free or cheap, and write a short spoiler-free hook. It took way more time than I expected.
2. My CSV kept breaking.
At one point the app crashed because some rows in books.csv had more columns than expected. The reason was commas inside the text like in the vibe tags and hooks which made the file think there were extra columns. I had to go through the file and fix those rows.
3. A merge conflict in books.csv.
While adding books I ended up with a merge conflict in the same file, and I had to clean it up by hand and check that no conflict lines were left inside my data.
Why Does Open Innovation Matter?
If I'd used an AI API key, this project would've been easier to start. But I am glad that I went open because of these reasons:
1. Her reading taste stays private
Because Gemma runs on my own laptop through Ollama, so nothing she types goes to any company's server. Since I was building it for a friend, that thing mattered to me.
2. It costs nothing to run
Since there's no API key, no billing is required so it is feasible for a college student like me, so that made a real difference.
3. I control how the model behaves
Because I run the model, I decided exactly what it's allowed to do. I told it to pick only from my list, keep things short and to be warm. I also chose which model size to use, especially when the bigger model felt too slow on my laptop, I switched to a smaller model.
4. It fits the idea.
This project is about removing barriers to starting. It felt right that the tool itself doesn't need a paid account or a subscription to use.
The live link runs on Streamlit's hosting, so it doesn't run Gemma. The privacy and no-cost points above apply to the local version, which is the full experience that can be run on your own system by referring the README.
What my friend said:
I let my friend try VibeLivre and asked her a few questions:
The prompt she gave : "I want to read a short story book that is interesting from the beginning and doesn't make me feel bored." VibeLivre suggested Alice's Adventures in Wonderland, How the Sea Became Salty by Sudha Murty, and A Christmas Carol.
She picked How the Sea Became Salty. She said: "I would really want to know how the sea becomes salty." Honestly, that's the exact moment I was hoping for, a book she wants to open because she's curious.
I also asked her whether the picks felt less scary than choosing alone, and her answer was "no, cause it saves a lot of time." So the fear wasn't what it fixed for her, what it fixed was the overload of too many choices. When I asked if anything was confusing, she said no.
I was a bit surprised, but I'd rather write down what she actually said than what I hoped she'd say. It showed me that for her, the biggest problem was the endless scrolling and choosing, not the fear.
What I'm planning to build next:
- A daily check-in that gives a spoiler-free recap of where you left off, so a busy college day doesn't break the habit
- A "this book isn't clicking" rescue feature that suggests an easier replacement
- Smarter matching that understands meaning, not just exact words
Notes on the Data
- Books marked free are assumed to be in the public domain (Project Gutenberg / Standard Ebooks). Copyright rules vary by country, so please check availability according to your location.
- Page counts are approximate and vary by edition.
Prize Categories
- Best Use of Gemma: VibeLivre's recommendations are given by Gemma and run locally through Ollama.
Top comments (0)