Brain Dump - ATProto Goodreads
The following design document is acting as a brain dump, there will probably be holes in whatever I was thinking at the time.
Wording may be a bit weird because I used this in conjunction with AI to paste into a chat and get feedback. No generative AI was used to write this (hence the grammar mistakes). This brain dump is from awhile ago when my knowledge of the protocol was very hazy. Progress was started on this, but this specific iteration was very optimistic and would have never happened.
Notes
Collections
.books
This record collection would be used for storing the book data in a way that contributes to the intent of the protocol - which is data portability. Instead of having a reference such as gr:123456 , and leaving it at that for AppViews to manually fetch the actual individual book data, the lexicon should store enough information for the user to own their data. Each book record would contain the following:
.reviews
This record collection would be used for storing overall reviews of a book. This allows user to collect their thoughts from journal entries, into one overall review for other users. Each review record would contain the following:
.dates
This record collection would be used for storing the date(s) a book was read. This allows users to track how many times they’ve read a book, and when they started and stopped. In conjunction with the .journals record collection, this can be used for personalized journal entries for each read-through at each point in progress. Each date record would contain the following:
.journals
This record collection would be used for storing the personal journal entries for each book the user has read. This allows users to track their thoughts and recaps at different points in a book. In conjunction with the .dates record collection, this can be used for filtering journals by a specific read-through of a book. Each journal record would contain the following:
.shelves
This record collection would be used for storing lists (would be referred to as “bookshelves” by the AppView, or just “shelves” for short) of books. This allows users to further categorize their book collections in any way they would like. Each shelf record would contain the following:
The default AppView will have several default shelves, those being:
Default shelves will have the special functionality of auto-adding books. To ensure the ability to opt-out, the shelves can still be deleted, or they can be renamed to remove a prefix from the name so the AppView doesn’t enforce the default auto-add behavior. The prefix would probably be a *. Another method of removing built-in behavior, could just be allowing the user to check a box when creating a list which would say “use default behavior“, and then allow them to select a default behavior such as “Add any book that is rated 4.5 or more stars automatically“.
.shelfItem
This record collection would be used for storing what books are associated with each shelf. Each shelf item record would contain the following:
.readingPrefs
This record collection would be used for storing reading preferences of users. The collection would only contain one record, “self”. This data can be used for future reference when making a recommendation algorithm. The self record would contain the following information:
This idea is taken from the closed-source centralized Goodreads alternative known as The Story Graph. This will be recommended to be filled out on first log-in of the AppView, but will be able to be edited at any time.
Answers could be simplified to a tagging/enum system where it only allows pre-approved responses that the user can add as many for each input. This would make the data much more expected and interopable.
.accountPrefs
This record collection would be used for storing information on general AppView settings of users. The collection would only contain one record, “self”. The self record would contain the following information:
.goals
This record collection would be used for storing personal goals a user plans to achieve in a certain timeframe. Each goal record would contain the following information:
Discussion in the ATmosphere