Velocireader
A bootstrap, django-based website built using the Local Library Tutorial with modifications. Contains a list of the books I've read each year, along with bibliographic information and my highlights.
What I Wanted
- Those sweet GoodReads book cover grids
- A way to randomly resurface a kindle highlight
- A central place to look at everything I've read of different authors, genres, series, etc.
- A way to make sense of which areas I read more of, which ones I want to explore more
- A way to play with data visualizations
What I Did
- I started with the Local Library tutorial from Mozilla, excluding items that related to the circulation functions.
- Added in the additional fields I wanted, like Subject Headings from Library of Congress, read/not read, copy format (I read a ton of ARCs), etc.
- Realized that multiple items would have more than one author, so I had to change the models to facilitate a many to many relation. This happened after I had added over 100 items to my test instance, which meant I had to drop the table and add them all back.
- Found out how to upload a csv file of my existing kindle highlights and created a new model to house them.
- Built a view to show a random highlight on the homepage.
- Built out a ridiculous amount of business logic in the views (instead of moving them to the model, as I later learned is best practice) for individual detail views.
- Added querysets to combine the highlights, author, awards, etc. into an individual profile page for each book.
- Added querysets to include each author's books on the detail page, sorted by most recently published
- Decided reading challenge data was too messy and not as interesting to me. Moved instead to specific lists of books that I want to read more from. The view logic would also be easier if I made it a separate model that could contain the books instead.
- Added a page for data visualizations using chart.js.
What I Learned
- Don't build up a robust dataset for test--save the main entry/loading for production.
- Entering everything twice is exhausting
- Realize model functions beforehand--making a foreign key into a many to many relationship after the fact is annoying.
What I Used