Inspiration

Like choosing songs to listen to, finding books to read can be hard. With Kuration, you can spend less time choosing a book, and more time reading.

What it does

Kuration recommends “readlists” that carry books grouped by different topics and learnings, which enables readers to get a fuller view of the subject they choose. Users can create their own readlists as well.

How we built it

On the frontend we use a React framework called Next.js, which lets us create and deploy web applications at very high speeds. This receives data from the Flask backend and displays it accordingly. We used Flask to create a postgreSQL database to store readlists, books, and users, and containerized the database with Docker. Users must log in to create their own readlists.

For our CI/CD pipeline we have two main pathways - Github Actions, which is used for auto-deploying the Flask API, and Vercel deploys, which auto-deploys our Next.js code to production when we work on some updates on the main branch.

We also use monitoring with cAdvisor, as well as have both our client and server code containerized through Docker.

As a bonus we set up a Discord bot that keeps us updated with our Flask API deployments.

Challenges we ran into

One challenge we ran into was how to enable users to create readlists that only they can access; we did not want personal readlists to be public. Our solution was to assign each readlist an owner, where the readlists that everyone gets to see are owned by “default.” This way, readlists are private except for the ones we intend not to be.

Accomplishments that we're proud of

We are happy that users can create their own readlists and suggest books for default playlists, which means they can interact with the site instead of passively reading through the given recommendations. In addition, we implemented two ways of monitoring: using cAdvisor and Grafana with a Discord bot.

What we learned

Given our varying levels of experience, we learned different things from this project. Nimra has never worked with APIs or React before, but the use of Flask as an API for React helped give her a better understanding of what they are for.

What's next for Kuration

We think users would enjoy being able to share their created readlists with friends. Public readlists can be accomplished by adding a page for users to edit their readlists, and giving readlists an attribute of public or private.

In addition, as it is, many requests are made each time a user visits the site. We would like to implement some kind of caching in the future so that the client can hold some of the data and not request it again if they visit the site multiple times.

Share this project:

Updates