Self hosted read and to-read list book tracker

Overview

JELU

GitHub Workflow Status GitHub GitHub release (latest by date) Docker Image Version (tag latest semver) Discord

Official documentation

Like Jelu or find it useful ? Offer me a coffee

Purpose

This app main purpose is to track what you have read, what you are reading and what you want to read.

It acts as a self hosted "personal Goodreads" because I became tired of switching providers every time an online service was shut.

I also became tired of having to export and reimport my data each time with data loss in the process.

Also I wanted control on my data, so Jelu offers an API you can script or integrate with any third party tool or service (which you cannot do with the vast majority of other online services).

All my data is now located into a single-file database which can be saved anywhere.

Features

  • track read books so you don't have to remember everything
  • manage to-read list
  • Import history (from goodreads for now, via csv export)
  • Import single books manually or automatically via online search (through title, authors or isbn)
  • Mark books as currently reading, finished or dropped
  • Books can be tagged and a tag page can display all books with that tag
  • Links to third party providers are fetched online (google books, amazon, goodreads, librarythings) or computed from those providers id you could enter manually.
  • Author page with author detail and books from this author
  • Auto import author details from wikipedia
  • Auto merge authors (to fix duplicates resulting from automatic imports for example)
  • Provide embed code snippets so that books can be tracked in other sites, blogs or even markdown notes/journal

Usage

  • Import your existing history if you have a Goodreads account
  • Start recording your read books
  • Add books you want to read
  • Edit tags, books, import and change covers (either from a file on disk or from a url) ...

Installation

Java

  • download the java Jar from the releases section in a dedicated folder
  • go to this folder
  • start the jar (it is a spring fat jar so dependencies are included) : eg java -jar jelu-0.13.0.jar
  • If you want to tweak the default config (see src/main/resources/application.yml), just create a yaml file called application.yml in the same foler as the jar.

For example if you want the database to be located next to the jar file (instead of being located in the default ${user.home}/.jelu/database/ folder) :

jelu:
  database:
    path: .

The automatic metadata online search is provided for the moment through a calibre tool called fetch-ebook-metadata (whether you like it or not).

So if you want to use it with the java install, provide the path to the executable in the config, like so :

jelu:
  metadata:
    calibre:
      path: /usr/bin/fetch-ebook-metadata

If you run into a cors issue, update the config with the desired origins like so :

jelu:
  cors.allowed-origins:
    - https://jelu.myserver.org

Then open the web UI in your web browser at localhost:11111

Concerning Cors, the default is to accept everything, which you might not not want to do.

No config in the config file is equivalent to :

jelu:
  cors.allowed-origins:
    - "*"

Docker

An image is available here :

https://hub.docker.com/repository/docker/wabayang/jelu

This one is the easiest if you are used to it.

The docker image we provide embeds the fetch-ebook-metada executable to automatically import books based on their title, authors or isbn.

A sample docker compose would look like that :

version: '3.3'
services:
  jelu:
    image: wabayang/jelu
    container_name: jelu
    volumes:
      - type: bind
        source: ~/jelu/config
        target: /config
      - type: bind
        source: ~/jelu/database
        target: /database
      - type: bind
        source: ~/jelu/files
        target: /files
      - type: bind
        source: /etc/timezone
        target: /etc/timezone
        read_only: true
    ports:
      - 11111:11111
    user: "1000:1000"
    environment:
      - MYENV=test
    restart: unless-stopped

!!!! WARNING : ARM versions are built but have not been tested yet !

Screenshots

Home page :

home page

Auto import form (empty) :

Auto import form (filled) :

Auto import form (result preview) :

Auto import form (edit pre-filled results before importing to your account, eg : modify tags etc...) :

Books list :

Book detail page :

Book detail, events part :

Author page :

Embed code and preview :

Roadmap

  • Koreader integration (https://koreader.rocks/)
  • Komga integration (https://komga.org/)
  • Calibre integration (A bit less likely, but why not)
  • Isbn scanning via camera on mobile
  • Social features
    • possibility to 'follow' another user on another instance ?
    • public RSS feed of reading events
  • Storygraph csv import
Comments
  • Page does not work via reverse proxy + vivaldi

    Page does not work via reverse proxy + vivaldi

    Hi, in my first attempt to get this running in docker I get a db error and the container loops.

    I pre-created the volumes and set everything according to the compose example. I think there's some steps im missing

    installation 
    opened by kavemang 17
  • fetch cover do not work

    fetch cover do not work

    Hi and thanks for this app

    Unfortunately It doesn't fetch the cover from most of the books I add (auto fill):

    Whitelabel Error Page

    This application has no explicit mapping for /error, so you are seeing this as a fallback.

    Sun May 15 15:44:39 UTC 2022

    There was an unexpected error (type=Not Found, status=404)

    debug: 2022-05-16 16:17:37.718 DEBUG 1 --- [io-11111-exec-8] i.g.b.j.s.metadata.FetchMetadataService : parsed dto MetadataDto(title=Das Sissi-Feuerwerk: Ein Ischl-Krimi, isbn10=null, isbn13=9783492502504, summary=null, image=null, publisher=Piper, pageCount=null, publishedDate=2019-05-15T16:17:35.252073+00:00, authors=[Jenna Theiss], tags=[], series=null, numberInSeries=null, language=deu, googleId=9qp-wgEACAAJ, amazonId=null, goodreadsId=null)

    Are there optional settings to fix or improve this?

    opened by Famku 15
  • Goodreads import creates duplicate events for some books

    Goodreads import creates duplicate events for some books

    Hi, I'm finding that the recent reading event list duplicates 3 of the recent books, not sure whats causing it just yet (I havent figured out why im getting "no mapping for GET" in vivaldi yet, I disabled extensions that I thought might be causing it like privacy badger and ublock origin)

    Capture

    bug 
    opened by kavemang 15
  • Add book auto Fill doesn't work

    Add book auto Fill doesn't work

    I've just spun up an instance of Jelu using the exact docker-compose example file, on a Raspberry Pi 4 (ARM64). I've not used bind mounts before (I normally use volumes: - "./config:/config" , etc) and it was a bit odd having to manually create all the folders manually one at a time on my file system. I tried the way I normally do it but it had permissions errors for the database when I did that, which is a bit unusual as docker created the folders when doing it that way.

    Anyway, to get to my issue, when I go to Add Book, then click Auto Fill, I search for something (say Harry Potter for the title) and it shows me words that say "cover image" (not an actual cover image). Inspecting the page I see it is trying to show the image "/files/null" There are no details retrieved for the book. I've tried a bunch of different books that should exist but no luck on any.

    opened by Neriderc 12
  • Bug: currently reading events deleted after adding a finished one.

    Bug: currently reading events deleted after adding a finished one.

    Hello,

    I am experiencing a strange bug when adding reading events to a book. Basically I import a new book into Jelu and create a "currently reading" event with a today date. Everything works fine. Then after some days that I finish reading the book I go to Jelu again and add (+event) a new finished event with the current date (several days after the "currently reading" date). I am expecting to have two events now in the book: a started"currently reading" and a "finished" one. However, I always end up having just one "finished" event, and the "currently reading" is deleted.

    Is this the expected behaviour? If I manually add the "currently reading" again, it is kept.

    I hope I have managed to explain myself....

    documentation 
    opened by jrhbcn 10
  • Feature request:  Translators field in books

    Feature request: Translators field in books

    Hi,

    It would be nice to have a separated (and searchable) "Translators" new field for translators. After importing my goodread list, authors and translators get mixed in the same "Authors" field.

    feature request 
    opened by jrhbcn 8
  • Add Google Books ISBN search for book autofill feature

    Add Google Books ISBN search for book autofill feature

    The book auto fill feature is neat, but a lot of my books are not found, event though I can find them from their ISBN on google book. The following API endpoint can be used : https://www.googleapis.com/books/v1/volumes?q=isbn:<insert_isbn_here>

    I could contribute an implementation if you would like me to

    feature request 
    opened by Ombrelin 6
  • Bug: Wrong handling of missing dates

    Bug: Wrong handling of missing dates

    It seems the app is treating a 'null' date as 'unix 0 timestamp'.

    After importing from Goodreads, for all the entries that were 'read' but did not have a date; as well as for all 'currently reading' books; Jelu shows the completion date as 1. 1. 1970.

    For instance, this 'currently reading' (with no finish date):

    image

    opened by zblesk 6
  • Export does not handle multiple read / finish / drop events in books

    Export does not handle multiple read / finish / drop events in books

    Hello,

    Really thank you for this tool, I have been waiting for something to keep track of my read books. I started using a single text file, then an excel sheet and finally goodreads. However, I would like to keep my data personal and also to be able to export it completely to move on if needed (not like goodreads as I painfully realice now).

    Anyways, I am testing the export functionality before I commit myself fully to Jelu and realised that events are not really exported. Multiple "reading" events are ignored (only the last one is exported). Also "drop" events are ignored. Multiple "finished" seem to be supported and exported as alist though.

    Is it possible to export the full list of events? Best regards,

    feature request 
    opened by jrhbcn 6
  • csv import from goodreads fails

    csv import from goodreads fails

    i just set up my jelu instance (on an arm64 server) manual importing of books works. when i try to import my exported data from goodreeds i get the following errors:

    2022-12-17 10:02:38.327 DEBUG 1 --- [io-11111-exec-7] i.g.b.jelu.controllers.ImportController  : target import file at /files/imports/goodreads_library_export.csv
    2022-12-17 10:02:38.408 ERROR 1 --- [         task-1] i.g.b.j.s.imports.CsvImportService       : Failed to process line or save data from file /files/imports/goodreads_library_export.csv, line : null
    2022-12-17 10:02:38.409 ERROR 1 --- [         task-1] i.g.b.j.s.imports.CsvImportService       : Failed to process line or save data from file /files/imports/goodreads_library_export.csv, line : null
    2022-12-17 10:02:38.409 ERROR 1 --- [         task-1] i.g.b.j.s.imports.CsvImportService       : Failed to process line or save data from file /files/imports/goodreads_library_export.csv, line : null
    2022-12-17 10:02:38.434 DEBUG 1 --- [         task-1] i.g.b.j.s.imports.CsvImportService       : Missing isbn for line with goodreadsId 15881, title Harry Potter and the Chamber of Secrets (Harry Potter, #2) and author J.K. Rowling, import it yourself manually
    2022-12-17 10:02:38.435 ERROR 1 --- [         task-1] i.g.b.j.s.imports.CsvImportService       : Failed to process line or save data from file /files/imports/goodreads_library_export.csv, line : null
    2022-12-17 10:03:05.936 DEBUG 1 --- [         task-2] i.g.b.j.s.imports.CsvImportService       : parsing finished, 0 entries recorded
    2022-12-17 10:03:05.936  INFO 1 --- [         task-2] i.g.b.j.s.imports.CsvImportService       : csv parsing of /files/imports/goodreads_library_export.csv ended after : 0 seconds
    2022-12-17 10:03:05.938 DEBUG 1 --- [         task-2] i.g.b.j.s.imports.CsvImportService       : File /files/imports/goodreads_library_export.csv was successfully renamed after processing : true
    2022-12-17 10:03:05.938  INFO 1 --- [         task-2] i.g.b.j.s.imports.CsvImportService       : Import for /files/imports/goodreads_library_export.csv ended after : 0 seconds, with 0 imports and 0 failures
    2022-12-17 10:07:27.544  WARN 1 --- [o-11111-exec-10] o.s.web.servlet.PageNotFound             : No mapping for GET /profile/messages
    

    (the actual log is longer, but i removed the duplicate messages between 2022-12-17 10:02:38.435 and 2022-12-17 10:03:05.936

    bug 
    opened by emhl 5
  • Password field limited to 30 characters

    Password field limited to 30 characters

    The login form has the PW field limited to 30 characters, the password I originally created was 32 characters. Logging in does not work, neither by limiting to the first 30 characters of the password, nor by forcing 32 characters into the field.

    opened by Christoph-Wagner 4
  • Wrong covers imported, covers do not update manually

    Wrong covers imported, covers do not update manually

    Essentially the title. When a goodreads csv import is done, wrong covers get uploaded. Eg:

    image

    Some are hilariously wrong.

    When you edit the book and upload the cover manually via manual file upload (not the URL), it never changes. the Upload progress bar does work, but old cover persists.

    opened by AIndoria 3
  • Ability to re-import Cover Art

    Ability to re-import Cover Art

    Feature Request

    After my upgrade to 0.31.0 I lost the cover art for my recent imports (see screenshot). Older art is maintained. I can delete the book and re-import it, and the cover art is restored, but several books have reviews or other post-import data added that will difficult to recover.
    Screenshot 2022-09-22 090021

    I know we can add custom cover art, but It would be nice to have the ability to re-fetch the book cover art.

    P.S. ~~maybe an issue - if I try to view the link for a cover that's missing I get a 502 error (Bad Gateway) I would have expected a 404 (file not found) but maybe that's a Tomcat thing?~~ Never mind, the missing images showed up eventually. The delay was strange, but after a few refreshes, all of a sudden the missing covers appeared. It would still be nice to be able to re-fetch the cover art manually.

    feature request 
    opened by crh0831 2
  • Optimize resource usage

    Optimize resource usage

    The app uses more than 250MB of memory while running. This might be fine on a homelab but I would like to run it on a cloud VM that is a little more resource constrained. Any chance to get the resource usage down a bit?

    enhancement 
    opened by max-tet 2
  • Feature request: Improve search

    Feature request: Improve search

    Hi,

    I think it would be more intuitive if the basic search box does a search through all the fields (titles,authors,series,etc.) and then in the advanced search you can really separate the search in fields. It seems right now the basic search box only searches in titles. It would also be nice to add more fields to the advanced search (language, summary and personal notes).

    Furthermore, search should not consider accentuated letters so "traición" also finds "traicion".

    Again, thanks for making Jelu available for all! Please feel completely free to ignore all my requests. ;)

    feature request 
    opened by jrhbcn 1
  • Backend Issue

    Backend Issue

    After adding about 50 books the last book I tried to add wouldn't add, then a Error 500 popped up. Tried reloading the page, then restarting the container, then eventually removing Jelu and doing another docker-compose and I get a "login error, backend seems down or unreachable" on the login page

    opened by gurdycrumpton 3
Releases(v0.35.0)
Owner
null
Sanctuary relies on the Android Work Profile APIs to create a self-contained work profile on a user's personal device.

Sanctuary relies on the Android Work Profile APIs to create a self-contained work profile on a user's personal device. Managed apps, data, and management policies are restricted to the work profile, keeping them secure and separate from personal data while maintaining user privacy.

Jonathan Odul 1 Dec 15, 2021
An Android-based Cellebrite UFED self-defense application

A proof-of-concept Android application to detect and defeat some of the Cellebrite UFED forensic toolkit extraction techniques.

levlesec 300 Dec 4, 2022
Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

Todo List Application is an android app that allows building a todo list and basic todo items management functionality including adding new items, editing and deleting an existing item

null 0 Jan 22, 2022
An Android app that lets you download free children's books in different languages from non-profit publisher Book Dash

Bookdash Android Check out the blog post here: http://riggaroo.co.za/book-dash-android-app/ Download the app: https://play.google.com/store/apps/detai

Book Dash 684 Jan 8, 2023
Companion App for the book

Kotlin for Android Developers (the book) This is the code you can use to follow the book. https://antonioleiva.com/kotlin-android-developers-book/ Are

Antonio Leiva 2.6k Dec 14, 2022
Book Parking is a demo application based on MVVM architecture. The app allows users to booking parking slots, the app uses firebase for the backend.

Book Parking is a demo application based on MVVM architecture. The app allows users to booking parking slots, the app uses firebase for the backend.

Dheeraj Gupta 5 Dec 24, 2022
Coinbase-pro-feed-kotlin - Kotlin Coinbase Pro Level 2 Order Book Feed

Kotlin Coinbase Pro Level 2 Order Book Feed Quick start Depending on your OS run

Eric McEvoy 0 Jan 2, 2022
Bookly -Library Book Management App

Android-Study-Jams Bookly -Library Book Management App Problem Statement: University libraries have a very vast collection of books from which student

null 2 Feb 24, 2022
BabyBook - Android Mobile application about keeping a baby book

BabyBook Android Mobile application about keeping a baby book Used Tech Language

null 1 Jan 27, 2022
CoolReader 3 - cross platform open source e-book reader

CoolReader 3 - cross platform open source e-book reader (c) Vadim Lopatin, 1998-2018 Development is moved to GitHub https://github.com/buggins/coo

Vadim Lopatin 302 Jan 4, 2023
This project consists in the approach of a bakery business, in which the user can book one or more products (cakes), in addition to having the method of payment in cash (post-shipment) or the method of payment via mobile

This project consists in the approach of a bakery business, in which the user can book one or more products (cakes), in addition to having the method of payment in cash (post-shipment) or the method of payment via mobile

Paul Guillen Acuña 2 Dec 20, 2022
Book selling application with MVVM (Model, View, ViewModel)

Book selling application with MVVM (Model, View, ViewModel), LiveData, DataBinding, Retrofit, Room Database, Navigation Component(NavGraph, BottomNav), ViewPager2 in TabLayout, SearchView, Vertical Adapter(BestSellers) and Horizontal Adapter(All Books) with ConcatAdapter for Main Screen, Firebase Auth, SearchView in Adapter, Picasso, Lottie, Animated Svg for Splash

Caner Türe 60 Dec 26, 2022
Android-TODO-LIST-VIPER - Android TODO LIST VIPER

Android TODO List VIPER VIPER is an architectural approach for iOS mobile app de

Allan Nava 1 May 26, 2022
NimTome is a Free and open-source spell tracker application for Dungeons and Dragons

Nimtome: An open source application to manage all your spells in D&D About This project came to life as a homework assignment, but it became a lot bit

null 2 Jan 11, 2022
Loop Habit Tracker, a mobile app for creating and maintaining long-term positive habits

Loop is a mobile app that helps you create and maintain good habits, allowing you to achieve your long-term goals. Detailed graphs and statistics show you how your habits improved over time.

Alinson S. Xavier 5.8k Jan 7, 2023
Episodie is a TV show time tracker app with unusual design written in kotlin and clean architecture approach. Get to know how much time you spent watching tv shows.

Episodie Episodie is a TV show time tracker app with unusual design. Get to know how much time you spent watching tv shows. Track easily overall progr

Przemek 126 Dec 7, 2022
DNS over HTTPS / DNS over Tor / DNSCrypt client, firewall, and connection tracker for Android.

RethinkDNS + Firewall for Android An OpenSnitch-inspired firewall and network monitor + a pi-hole-inspired DNS over HTTPS client with blocklists. In o

null 1.1k Jan 5, 2023
Water tracker app helps you with daily reminder to drink water. This app is just a trial to test and improve my android development skills.

?? About Me I am a self-thaught developer learning web and android development. This app is just a trial to test and improve my android development sk

Sinan Sonmez (Chaush) 28 Dec 17, 2022
Google map location tracker uploading current to realtime database and displaying location information from firebase realtime.

WEEK-8-SQ009-ANDROID LOCATION - GROUP WORK (2) Problem Description Track your partner(s). Implementation 1: You are to build a map application to show

null 0 Mar 16, 2022