Name: Bhaskar kumar singh
IRC nick: BhaskarSingh
I plan on making a bookshelf where users can see the kind of books they are currently reading, want to read, already read, there favorites and also can create their own collections keeping in mind to limit it to one kind of entity only & allowing user to either make it public or private according to the preference.The purpose behind collection of user data is for building a recommendation system in the future by doing so we can give personalized book recommendations to users on the basis of their favorite books and the book they are either reading or want to read or have already read or their collections.
Why store favorite books ?
It will be helpful while building the recommendation system, giving more weightage to favorite books than the books that the users might be currently reading or have already read or want to read because user will be more inclined toward reading the type of books that user loves very much rather than the book that they just recently read thus helping us build a more personalized experience for the users.
Three new tables will be needed to be created named: bookshelf, user_collection_group, user_collection_list
`CREATE TABLE bookbrainz.bookshelf( Id SERIAL PRIMARY KEY, editor_id INT NOT NULL, alias_id INT NOT NULL, work_header INT NOT NULL, already_read BOOLEAN DEFAULT false, want_to_read BOOLEAN DEFAULT false, currently_reading BOOLEAN DEFAULT false, favorite BOOLEAN DEFAULT false );`
ALTER TABLE bookbrainz.bookshelf ADD FOREIGN KEY (editor_id) REFERENCES bookbrainz.editor (id);
ALTER TABLE bookbrainz.bookshelf ADD FOREIGN KEY (alias_id) REFERENCES
`CREATE TABLE bookbrainz.user_collection_group( Id SERIAL PRIMARY KEY, entity_type varchar(64) NOT NULL, name varchar(100) NOT NULL, description varchar(255) NOT NULL, public_access BOOLEAN DEFAULT false, date TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT timezone('UTC'::TEXT, now()) );` `CREATE TABLE bookbrainz.user_collection_list( Id INT NOT NULL, entity_data_id INT NOT NULL, entity_header_id INT NOT NULL, date TIMESTAMP WITHOUT TIME ZONE NOT NULL DEFAULT timezone('UTC'::TEXT, now()) );`
ALTER TABLE bookbrainz.user_collection_list ADD FOREIGN KEY (id) REFERENCES
(Note: data type for column work_header_bbid(bookshelf table) will be uuid)
UI is just for presentation only, UI style will be according to the metabrainz react design system.
New Pages that will be created: bookshelf page, public collections page & collection_list page.
UI & workflow for data collection of users(Bookshelf - favorites, want to read, already read & currently reading)
Here if the user has already select a option or added book to favorite show the saved state other wise show default options
UI & workflow for users to add item to their collections
Here to make sure that when user clicks on add to collection, at the end of opened modal show text message saying “A collection can contain one type of entity only” and from all the previously created collections disable the ones which are not of the type of entity opened currently.
Bookshelf UI and workflow
For favorites, option menu will only show option to remove favorites
For currently reading, want to read, already read option menu will show option to move to different state between the three & also option to remove the item from bookshelf.
User collection creation UI & workflow
User will not be allowed to edit entity type after creation of a collection to keep the one entity type for a collection state in sync.
Public collection page UI & workflow
Public collections will show all the public collections created by user having option to filter by latest updates, oldest & entity type
Search view UI
(Note: I have never work with postgresql database as backend but I know sql & have experience working with mysql, I am a quick learner and with little help will get comfortable with codebase in no time)
Community bonding(May 27 - June 24)
During this time, I will get more comfortable with the codebase(and specially will spend time understanding how database i.e postgresql is connected & working of backend) and will discuss design decisions & backend structure with mentor.
Phase 1(May 27 - June 25)
Using test-driven development environment methodology, I will work on backend (create table & build endpoint api) & frontend for buidling bookshelf UI & it’s workflow & easier way for adding books to bookshelf.
Phase 2(June 26 - July 30)
In this phase I will build the user collection feature, where I will work on both backend & frontend to create this feature for users to easily create their own collections & view it.
Phase 3(August 1 - August 27)
In this phase I will build the public collections page where users can access other users public collections & I will also add add to collection component in search view so that it’s easier for user to add item to a collection, document the backend apis, work on final submission & make sure every everything works correctly.
Detailed week by week timeline for gsoc coding period to keep myself focused and on the track.
Update my repository with master & make sure everything is up to-date, start with creating required new table for bookshelf & using test-driven development methodology create endpoint API for adding book to bookshelf & marking it as favorite.
Create select & like component, then link the frontend page to backend making sure adding book to bookshelf & adding to favorites is functioning correctly.
Using test-driven technology create endpoint API for bookshelf page.
Build UI components for bookshelf & linking backend to frontend making sure every functionailty is working correctly.
Using test-driven development methodology build endpoint API for users to add item to their collections or create one for adding the item.
Create component for adding entity to a collection previously created or create a new one keeping in mind that each entity type should have it’s own separate collection.
Using test-driven development methodology build endpoint API for showing created user collections in bookshelf.
Build components for showing user created collections & functionality for creating one.
Build Backend API for showing public user collection.
Build public collections page showing collections created by users
Add option for add entity to a collection directly from search view results.
Add documentation where necessary & manually testing all the endpoints with keeping important edge cases in mind and work on it if any.
Work on final submission & make sure everything is working correctly, that is testing that adding book to book shelf, marking as favorite and creating & adding item to collection is working correctly.
Detailed information about yourself
I am currently in my 2nd year undergraduate, pursing B.com(prog) from motilal nehru college delhi unversity, I first got introduced to programming in class 11th(as optional course provided by the school) from there I got really interested in it & in February 2018 I got scholarship by google/udacity for front-end nanodegree & thanks to that I got a good start which I need to get into web development field and from that time to now I have build two personal projects of mine which I am very proud of, learned react & I have worked with nodejs and mongodb(nosql) as database for backend and and indoing so I have I have used so many open sourced libraries and understanding that it was only possible with all the hard work done by awesome developers & giving back to the community.This opportunity will give me the push needed to get into open source projects and I am super excited for this project & working with and learning from the mentor.
Tell us about the computer(s) you have available for working on your SoC project!
Macbook air with 8gb ram and 128gb ssd
When did you first start programming?
In class 11th I was introduced to programming as a additional subject(java & mysql) & from there I really got interested in programming.
What type of music do you listen to? (Please list a series of MBIDs as examples.)
Mostly youtube recommendation in loop(list goes from Punjabi, hindi to english music)
Sunflower (Spider‐Man: Into The Spider‐Verse)
Post Malone - Better Now
If applying for a BookBrainz project: what type of books do you read? (Please list a series of BBIDs as examples. (And feel free to also list music you listen to!))
Recently I read : Rework
What aspects of the project you’re applying for (e.g., MusicBrainz, AcousticBrainz, etc.) interest you the most?
Bookbrainz project, I liked the idea behind creating a platform where anyone can find book information they might be looking for free.
Have you ever used MusicBrainz to tag your files?
Have you contributed to other Open Source projects? If so, which projects and can we see some of your code?
What sorts of programming projects have you done on your own time?
Apart from udacity frontend nanodegree projects, I have worked on two personal projects of mine, 1st beign pocketpubg where we organised pubg tournaments online, you can check the website(pocketpubg.me) where I worked on making the whole process of registration very easy(one click to enter tournament after registration) so that users can focus on playing the game rather than stuck confused & avoid repetition and the 2nd one (bookobooks.com) market place where college students can buy & sell second hand books cheaply & conveniently(still work in progress).
How much time do you have available, and how would you plan to use it?
I will be working for around 40-50 hours every week for gsoc.
Do you plan to have a job or study during the summer in conjunction with Summer of Code?
If selected for gsoc then none otherwise I intent to work on a new personal project of mine.