MoodReads
A book recommendation app that starts from how you feel. Over 750 people use it.
- Role
- Solo project. I designed the recommendation framework and built the app.
- Year
- 2024–present
- Status
- Live on iOS and the web
- Tools
- React Native, Expo, TypeScript, Python, Flask, Firebase, PyTorch, Hugging Face Transformers, scikit-learn

The problem
Most book recommendations start from what you’ve already read: people who liked this also liked that. But what you want to read next often depends less on your history and more on how you feel right now. A great book for a calm Sunday can be the wrong book for an anxious week.
As the Teen Advisory Group leader at my local library, I kept coming back to one question: how can I give readers better book recommendations?
What I built
I designed a recommendation framework based on emotion, then built MoodReads around it. The app picks up your mood from what you write, then suggests books that fit it. Over time it learns the authors, genres, and themes you like, so the suggestions get more personal.
- Mood-based recommendations across a set of core emotions, from happy and calm to anxious and sad.
- An explore page of AI-curated books, from bestsellers to lesser-known picks.
- A mood log, a private diary for recording how you feel, which also feeds into future recommendations.
- A profile that shows your reading history and your most frequent emotions, plus a leaderboard for reading milestones.
MoodReads is free, and it’s available on the App Store and at moodreads.ai.
How it works
The app is built with React Native and Expo, so one TypeScript codebase runs on iOS and the web. It talks to a Python API built with Flask, and user data lives in Firebase.
Reading your mood. When you write a mood log, a DistilBERT model classifies it as one of six emotions: sad, anxious, angry, lonely, bored, or happy. I fine-tuned it on Google’s GoEmotions dataset, mapping its 27 fine-grained labels down to those six.
Matching books to it. Each book in the catalog is tagged with the feelings it gives a reader, like comforting, calming, cathartic, or thrilling. Each reader emotion maps to a set of those tags, so feeling anxious leads to calming and cozy books, and feeling bored leads to thrilling ones. Within that set, a hybrid recommender ranks the books. A content-based score (TF-IDF over each book’s description, genres, title, and author) counts for 60%, and a collaborative score from readers with similar ratings counts for 40%.
My role
I built MoodReads on my own: the emotion-based recommendation framework, the emotion model, the backend, and the app.
Outcome
MoodReads has over 750 users, and I’ve shipped more than a dozen updates since launch. The most recent added the diary page and reworked how emotions are handled.