After v1.0.0 is out I plan to add the ability to add books manually to the database, at which point we'll be able to start improving the database without relying on third-party services.
1,449 karma · joined May 12, 2019
You can get in touch with me by sending an email to james AT cipher DOT host.
After v1.0.0 is out I plan to add the ability to add books manually to the database, at which point we'll be able to start improving the database without relying on third-party services.
I could add them as an extractor, I suppose :thinking:
[1]: https://i.cpimg.sh/pexvlwybvbkzuuk8.png
I wrote a Go SDK[1] for the service, maybe I'll try writing one in TypeScript tomorrow.
I'm hoping Goodreads and Anna's Archive will help fill in the gaps, especially since Anna's Archive have gigantic database dumps available[1].
You can think of it as a data source, or a knowledgeable companion that can provide comprehensive book information for online booksellers, libraries, book-related startups, bookworms, and more.
I got a pre-alpha build running for those that want to test it out and the code is out on SourceHut[1].
Been really tough to find time to work on it because I have a baby that only sleeps in my lap, but I’m making progress very slowly.
I recently hired someone to rewrite the entire database layer, as that was written with the help of an LLM for the prototype, which should improve things too.
Feedback is very welcome :)
I’m on the same boat and told management at work that I won’t be traveling to the US while Trump is in power, which they seem to be fine with, but who knows if that’ll last.
You can think of it as a data source, or a knowledgeable companion that can provide comprehensive book information for online booksellers, libraries, book-related startups, bookworms, and more.
I got a pre-alpha build running for those that want to test it out[2], but the code is still not out there, as there are a few things I want to refactor. Wrote comprehensive documentation for it this weekend, now I need to refactor the merger package with some new rules, and write something to decrease the number of genres returned.
Been tough to find time to work on it because of the baby, but AI has been helping a lot to speed things up, and the work has been quite fun. Not sure if there will be interest in the idea, but it solves a problem I have, so I had to work on it anyway.
Hope to have the code on GitHub by the end of this week. AGPL licensed.
[1]: https://github.com/pagina394/librario
[2]: https://paste.sr.ht/~jamesponddotco/5612eaa80fc7eee8b6180a31...
Any chance we could get an API going at some point? Are you planning to open source the work?
I'm interested in the scrapping of Goodreads too. I'm building a book metadata aggregation API and plan on building a scrapper for Goodreads, but I imagine using a data center IP address will be a problem very fast. Were you scrapping from your home network?
Is this approach something that makes sense in Go as well? I see at least one package[1][2] for Go, but I wonder if the approach itself makes sense for the language.
[1]: https://github.com/flyingmutant/rapid
[2]: Oh, I just found out about testing/quick.
We mostly use Claude Sonnet and Gemini 2.5 Pro, with a bit of GPT-5 when I need design work, and Claude Haiku in Home Assistant.
I prefer to use chat instead of agents… I use AI generated code as a starting point, mostly, and chat works better for that.
You’re definitely an outlier. Aside from companies, I don’t know anyone spending that much, to be honest.
So I started working on Librario, an ISBN database that fetches information from several other services, such as Hardcover.app, Google Books, and ISBNDB, merges that information, and return something more complete than using them alone. It also saves that information in the database for future lookups.
You can see an example response here[1]. Pricing information for books is missing right now because I need to finish the extractor for those, genres need some work[2], and having a 5 months old baby make development a tad slow, but the service is almost ready for a preview.
The algorithm to decide what to merge is the hardest part, in my opinion, and very basic right now. It's based on a priority and score system for now, where different extractors have different priorities, and different fields have different scores. Eventually, I wanna try doing something with machine learning instead.
I'd also like to add book summaries to the data somehow, but I haven't figured out a way to do this legally yet. For books in the public domain I could feed the entire book to an LLM and ask them to write a spoiler-free summary of the book, but for other books, that'd land me in legal trouble.
Oh, and related books, and things of the sort. But I'd like to do that based on the information stored in the database itself instead of external sources, so it's something for the future.
Last time I posted about Shelvica some people showed interest in Librario instead, so I decided to make it something I can sell instead of just a service I use in Shelvica[3], hence why I'm focusing more on it these past two weeks.
[1]: https://paste.sr.ht/~jamesponddotco/de80132b8f167f4503c31187...
[2]: In the example you'll see genres such as "English" and "Fiction In English", which is mostly noise. Also things like "Humor", "Humorous", and "Humorous Fiction" for the same book.
[3]: Which is nice, cause that way there are two possible sources of income for the project.
[1]: https://sr.ht/~jamesponddotco/
[2]: https://github.com/jamesponddotco
[3]: Email is on my Hacker News profile.
Having a full time job and a baby to take care of make progress slow, but I should have the website ready soon. Shoot me an email and I can let you know when that happens.. email is on my profile.
I do plan on including a link to the book on Anna’s Archive in the “ISBN Search” website. At least to the search page with the filters already filled.
Mostly because I’m working on a personal library management service called Shelvica to solve my own problems[1], and none of those services provided all the information on a book. One might provide the series, the other might provide genres, and yet another might provide a cover with good dimensions, but none provided everything, so I decided to work on something of my own (called Librario).
While Shelvica is the focus, Librario could become its own thing in time, so I don’t mind the sidetracking.
I also plan on having a “ISBN Search” kind of website that feeds from that database as a way to let users search for information about books, which then feeds the service’s database, making it stronger for Shelvica.
I open source everything I make, but I’m still wondering if these will be open sourced or not. I’ll probably go with the EUPL 1.2 license if I do decide on open sourcing them.
[1]: My wife and I have a personal library with around 1800 books, but most applications for management are either focused on ebooks or choke with this many books. Libib is the exception, but I wanted a little more.
I’m a Firefox guy myself and web apps are not something I care about for privacy reasons, but I agree that not having the option is a bummer.
The camera bump never really bothered me on the iPhone or the Pixel Fold I had before this iPhone. I just don’t notice it, but then again, I also didn’t notice the crease in the fold.
I miss Tachiyomi though. Panels is nice, but I had to built a whole OPDS-proxy to a manga website to have something close to Tachiyomi. Oh, and the ability to turn off network access on a per-application basis that came with GrapheneOS (plus the security of GrapheneOS itself).
While I prefer Android and Pixels (using GrapheneOS), I have switched my family to the Apple ecosystem to have a middle ground between privacy and features, so I’m not coming from an “I love Apple and everything else sucks” background, mind you.
For my projects I can just include the dependency, as I wrote it and don’t mind using it. Other people can copy it instead, since the proverb goes “a little copying is better than a little dependency”.
When Vault is not available, if I’m working on a side project, for example, that’s what I always go for. Even wrote a small Go package[2] to get said credentials when your application is running inside a service with that feature.