openlibrary
openlibrary copied to clipboard
Book Battles
See: https://docs.google.com/document/d/1Ddeg-fWWZ0iCFzVtZR0yGY_vCPttIUrd4tCIWwvYj6g/edit#heading=h.hwsgbba3g9bn
Describe the problem that you'd like solved
OpenLibrary.org is a catalog of millions of books, which can make finding the best books challenging. A traditional approach is to give books star ratings or reviews, but (a) this creates floating point in space and (b) many books may have 5 star ratings so this gives readers a limited understanding of whether one book is better than another. Book Battles is a way for readers to collaboratively surface the best books by voting that one book may be better than another.
How does it work?
A reader adds books that they’ve read to the “Already Read” shelf of their Reading Log. The reader then selects two books from their Already Read shelf and creates a Book Battle. The reader chooses one of these two books to be the winner and optionally enters a short review explaining why.
Proposal & Constraints
Additional context
Stakeholders
Hey @mekarpeles! I am very interested to work on this project and would definitely love to give it a try. How should I continue and go about it :)
This looks a great idea!! It is basically like product comparing feature of amazon
Something similar to above right? I would be happy to contribute such a nice feature, I can help up with the logical design part, @mekarpeles amazing idea!!
I think the first step is for folks to propose ideas / designs / implementations.
A drawing might be useful about:
- what such a feature might look like on Open Library and
- what does the flow look like for using this feature? (e.g. figma, screenshots, or pencil/paper)
Open Questions:
- Do readers submit requests for certain battles? Where / how?
- Where do readers see which battles they can participate in? Their "Already Read" Reading Log? Their My Books dashboard? Is there a Books Battle tab on their My Books menu w/ a number of open battles?
- How does a reader discover they are eligible to participate in a book battle?
- Where does a reader go to see active or pending book battles?
The idea is to make this feature as simple as possible to still be useful. So it would be useful to separate out what is essential versus what would be fun into 2 different buckets!
Oh my bad, it is not like compare feature. I read your docs carefully now. We would need to create different clusters of book and battles between two books of the same cluster will only be allowed, if we already have the classification of books by their genre then we can use it. giving readers suggestions of filling battle based on the books they have read is also a requirement, we can show them as the pending battles but there can be a problem once the user has read more than a limit amount of books, after that user will have too many battles to fill in but I have an alternative idea where we can do it more efficiently
Instead of having one to one battle let us give user the opportunity to rank the book he has just read w.r.t other books of the same genre he read in past, let me explain with a diagram
suppose user have already read orange, banana and apple books, now he reads a book called mango and ranks it 3 rd, now using the rank what we can do is
- add a battle orange vs mango, make mango loose in the battle
- add two battles mango vs banana and mango vs apple, make mango win in the battle.
Using this strategy, we will have a better UI, UX experience for the readers and save their time. What do you think about this @mekarpeles?
Hey @mekarpeles, so which implementation do you think will work the best?
I would like to work on this issue under GSOC 2024
Hi @mekarpeles
I hope you're well. I'm Prasad Bhujbal, and I'm excited about the "Book Battles" project on OpenLibrary.org. I believe this can significantly improve book discovery by allowing users to compare books directly.
I have experience in full stack web development, Application development, UI/UX design and would love to contribute. Specifically, I can help with:
- Designing user interfaces for submitting book battles and viewing leaderboards.
- Implementing discovery features for eligible book battles.
- Enhancing the backend for managing submissions and voting.
Looking forward to contributing!
Best,
Prasad Bhujbal
https://github.com/prasad14070
Hi @prasad14070 feel free to join one of our upcoming community calls on Tuesday @ 9am PT https://zoom.us/j/369477551 if you'd like to learn more or discuss the feature. @noobCoderVP is currently leading development on this project and I'm sure there are opportunities for us to leverage your contributions. Thank you :)
Possible schema:
superlatives
------------
superlative_id (Primary Key)
topic_id (Foreign Key to Topics)
submitter_id (Foreign Key to Patrons)
created_at
updated_at
superlative_criteria
--------------------
superlative_criteria_id (Primary Key)
superlative_id (Foreign Key to Superlatives)
criteria_id (Foreign Key to Criteria)
nominations
-----------
nomination_id (Primary Key)
superlative_id (Foreign Key to Superlatives)
submitter_id (Foreign Key)
winner_book_id
text_review
contestant_id (Nullable Foreign Key to Nominations, default NULL)
created_at
updated_at
This would allow us to factor out all our criteria for best book or a battle into a single data structure called superlatives. It would also allow us to treat bestbook and battles as the same because a nomination either has a contestant or it doesn't... If it doesn't then it's a best book. This also solves the problem that nominations always involve one book, but a patron can submit multiple nominations for a book so long as its (nomination_id, superlative_id, submitter_id, winner, contestant_id) is unique.