The goal of this application is to help organize a household's book library, with a particular focus on browsing it by shelf in a visually appealing way. It allows inventory management through virtual shelves. Each book can have the following properties:
- Title
- Author
- ISBN
- Comment
- Cover photo
- A set of textual tags
Title and cover photo are mandatory. Books can be searched by title, author, and tags. If you're looking for a fully-fledged integrated library system at a larger scale, consider Koha or similar solutions.
The backend is designed to run on a LAMP stack, primarily because the application is intended to run on cheap web hosting. However, multiple backend implementations are possible, and contributions are welcome.
The frontend is a single-page application implemented in React, Tailwind CSS and DaisyUI. When loading, the entire book library is downloaded from the backend and stored in memory. All search operations are performed in memory. Changes are incrementally sent to the backend as they are made, write conflicts will be detected but not fixed. Upon conflict a reload is needed.
This design ensures the backend remains simple and the application feels fast. A typical household library has at most a few thousand books. Downloading and working with a JSON object of this size is trivial and faster than offloading each search query to the backend.
make deploy
will build and deploy everything into the deploy
folder.
You can directly server the folder using a HTTP server or copy it to a webspace.
E.g. when rclone
is used:
rclone sync --progress --ignore-size --ignore-checksum --check-first deploy dest:public_html/
If the application is placed into a subfolder, set PUBLIC_URL
while building.
E.g. PUBLIC_URL=/wobuch-test/ make deploy
.
The application does not implement any authentication and fully trusts anyone with access. If you deploy it on an untrusted network, restrict access at the web server level, for example, by using HTTP Basic Authentication or similar methods.
- Implement support for renaming, deleting, and reordering bookshelves.
- Implement support for sorting books (currently, they are sorted by insertion order).
- Add bar code scanner support to scan books via smartphone.
- Find a better ISBN query API, currently Google Books is the only source.
- Add internationalization (i18n) support and translate the UI to English.
- Document the backend API (endpoints and data format).
- Switch from DaisyUI to another UI library, as DaisyUI is too low-level.