I use Jellyfin. You have to install the Bookshelf plugin (or at least I didn't the time I set it up, may be a default now). Saves progress, and gives me one less service to manage as I use Jellyfin for Movies, TV, and Music libraries already.
I'm using calibre as server and moon+ reader (pro) as reader. I can download the ebooks from my calibre server and with the pro version of moin+ reader I can sync reading positions (and books) between devices. This way I can continue reading on the phone where I was on the tablet while traveling.
Using a Kobo reader with Calibre & Calibre-web to serve the books.
Setup a shelf on web, create a sync token on web. Add token to the Kobo config, automatically syncs any books that are added to the shelf. This replaces the Kobo store api for syncing, but I don’t use it so no biggie for me.
I use calibre to manage my library. Well, mostly just to put them into one place. But to browse/read/download books I've written my own service reads the calibre sqlite database and serves it as a web page. It doesn't have opds support yet, but I'm looking into that. Check it out here: https://sr.ht/~ilikeorangutans/books/
I use Calibre with FBReader on a few android devices. You set up calibre as a web server and FBreader just connects to it directly. It stores reading position on Gdrive or dropbox, unfortunately not on NC or other self-hosted storage.
My flow is GoodReads (tracking/requesting) -> Readarr (manage downloads) -> Calibre (manage library/metadata) -> Calibre-Web (user friendly browsing/serving) and then I can send to kindle or download or whatever from Caliber-Web. I download from Usenets/Libgen/Openbooks
Honestly I've been using Google play books for years, just upload pdf or epub and you have it on phone, ipad and computer. Plus it remembers how far you are on between devices.
Readarr for storing on own server, before I upload them.
I run BicBucStrim on my NAS, and I access it through the web browser of any PC or tablet, my Kobo eReader, or Mobiscribe eReader. You can download a book to the device to read it, though. It basically just generates a nice web layout to access your Calibre library.